import os
import sys
import requests

from config.platform_config import platform_config
from utils.get_all_platform import get_all_platform

# from db.db_connection import create_db_connection
# from db.db_operations import insert_chat_data

import hashlib

async def call_maintain_api(maintain_platform = [],fmt_data = {},cancel_maintain=False,bot=None):
    connection = None   

    for platform in maintain_platform:
        config = platform_config.get(platform)

        try:
            # connection = create_db_connection()

            login_api = config.get("API_URL") + config.get("LOGIN")
            account = config.get("login_account")
            password = config.get("login_password")
            md5_password = hashlib.md5(password.encode()).hexdigest()
            login_res = requests.post(
                url=login_api,
                json={
                    "account": account,
                    "password": md5_password
                },
                headers=config.get("headers")
            )

            if login_res.status_code == 200:
                token = login_res.json().get("token")

                maintain_target = fmt_data.get("platform")
                s_date = fmt_data.get("s_date")
                s_time = fmt_data.get("s_time")
                e_date = fmt_data.get("e_date")
                e_time = fmt_data.get("e_time")

                all_platform = get_all_platform(auth_token=token,api_url = config.get("API_URL") + config.get("MAINTAIN"))
                
                platform_data = next(filter(lambda x:x["platform"] == maintain_target,all_platform),None)
                platform_uid = platform_data.get("uid")

                maintain_api = config.get("API_URL") + config.get("MAINTAIN") + f"/{platform_uid}"

                headers = {
                    "Content-Type": "application/json",
                    "Currency": "TWD",
                    "Exchange_code": "TWD",
                    "Authorization": f"Bearer {token}"
                }

                data = {
                    "platform": maintain_target,
                    "temp_maintenance_start_time": f"{s_date} {s_time}",
                    "temp_maintenance_end_time":f"{e_date} {e_time}",
                    "maintenance_start_time": s_time,
                    "maintenance_end_time": e_time,
                    "status_front":1,
                    "status_backend":0, 
                    "is_under_maintenance":1 if not cancel_maintain else 0,
                    "is_scheduled":0,
                    "is_exclusive_brand":0,
                    "enable_buffer_wallet":0,
                }

                response = requests.put(
                    url=maintain_api,
                    json=data,
                    headers=headers
                )

                if response.status_code == 200:
                    response_msg = f"""
                                    {platform}
                                    \n{"維護流程已確認" if not cancel_maintain else "維護流程已取消"}
                                    \n維護平台：{maintain_target}
                                    \n開始維護時間：{f"{s_date} {s_time}" if not cancel_maintain else "-"}
                                    \n結束維護時間：{f"{e_date} {e_time}" if not cancel_maintain else "-"}
                                    \nAPI回應代碼：{response.status_code}
                                    """

                    # insert_chat_data(
                    #     connection=connection,
                    #     data=(
                    #         f"{platform}維護流程已確認,API呼叫成功",
                    #         bot["from"]["first_name"],
                    #         response_msg
                    #     )
                    # )
                    await bot.reply(response_msg)
            
        except Exception as e:
            error_msg = f"""
                        {platform}
                        \n維護平台：{maintain_target}
                        \nAPI呼叫失敗原因：{e}
                        """
            # insert_chat_data(
            #             connection=connection,
            #             data=(
            #                 f"{platform}維護流程已確認,API呼叫失敗",
            #                 bot["from"]["first_name"],
            #                 response_msg
            #             )
            #         )
            await bot.reply(error_msg)
            continue
        
        