# import openai
import discord
import requests
import utils
import time
# OpenAIのAPIキーをセットアップする


# ChatGPTというクラスを定義する
class ChatGPT:
    def __init__(self, system_setting):
        # システムの設定をセットする
        self.system = {"role": "system", "content": system_setting}
        # ユーザーの入力を保持するためのリストを初期化する
        self.input_list = [self.system]
        # ログを保持するためのリストを初期化する
        self.logs = []

    # ユーザーからの入力を受け取り、OpenAI APIを使って回答を生成する
    def input_message(self, input_text):
        # ユーザーの入力をリストに追加する
        self.input_list.append({"role": "user", "content": input_text})

        print(input_text)

        # # OpenAI APIを使って回答を生成する
        # result = openai.ChatCompletion.create(
        #     model="gpt-3.5-turbo", messages=self.input_list
        # )
        # # 生成した回答をログに追加する
        # self.logs.append(result)
        # # 生成した回答をリストに追加する
        self.input_list.append(
            {"role": "assistant", "content": input_text}
        )

# Discord Botを作成するための準備
intents = discord.Intents.all()
client = discord.Client(intents=intents)


config = utils.get_config()
DISCORD_BOT_TOKEN = config["DISCORD_BOT_TOKEN"]
DISCORD_CHANNEL_ID = config["DISCORD_CHANNEL_ID"]


# Discord Botが起動したときに呼び出される関数
@client.event
async def on_ready():
    print("起動完了")

# Discordでメッセージが送信されたときに呼び出される関数
@client.event
async def on_message(message):
    # Bot自身が送信したメッセージには反応しない
    if message.author == client.user:
        return

    # 特定のチャンネルID
    target_channel_id = DISCORD_CHANNEL_ID

    # 投稿されたメッセージが特定のチャンネルからのものかチェック
    if str(message.channel.id) == target_channel_id:

        if len(message.attachments) > 0:

            #現在時刻をprintする.formatはY-m-d H:M:Sの形式で表示
            print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))


            image_url = message.attachments[0].url
            post_url = "https://mahjong-calc.com/mahjong/bot_upload_image"


            print("画像を受けとった")
            print(message.attachments[0].url)
            await message.channel.send("画像を受け取りました。解析までお待ちください")

            #画像を取得
            r = requests.get(image_url)
            #画像をpost
            files = {'file': r.content}
            # res = requests.post(post_url)
            res = requests.post(post_url, files=files)

            if res.status_code == 200:
                try:
                    if res.content:  # レスポンスが空でないか確認
                        res_json = res.json()
                        # print(res_json)
                    else:

                        text = "レスポンスの内容が空です"
                        print(text)
                except requests.exceptions.JSONDecodeError:
                    text = "JSONとしてパースできません。レスポンスの内容は以下です:"
                    print(text)
                    print(res.text)  # レスポンス内容を出力して確認
            else:
                # print(f"エラーが発生しました。ステータスコード: {res.status_code}")
                text = f"エラーが発生しました。ステータスコード: {res.status_code}"
                print(text)

            text = ""
            for user in res_json['users']:

                rank = str(user['rank'])
                user_name = user['user_name']
                point = str(user['point'])
                tip = str(user['tip'])
                total_point = str(user['total_point'])


                text += str(rank) + "位: " + user_name + " / " + point + "(tip:"+ tip +") 合計:"+total_point+"\n"

            if res_json['link']:
                text += "リンク:"+str(res_json['link']) + "\n"

        else:
            text = "画像を添付してください"
        print(text)

        answer = text

        # 回答を送信する
        await message.channel.send(answer)
    else:
        print("特定のチャンネルからのメッセージではありません")
        print("設定チャンネルID："+ str(target_channel_id))
        print("メッセージチャンネルID："+ str(message.channel.id))

        return



# Discord Botを起動する
client.run(DISCORD_BOT_TOKEN)
