import os
import sys
import requests

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

import hashlib

async def call_maintain_api(maintain_platform = [],fmt_data = {},cancel_maintain=False,bot=None):
    for platform in maintain_platform:
        config = platform_config.get(platform)
     
        try:
            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,
                    "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:
                    print(f"{platform}維護流程已確認")
                    await bot.reply(
                        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}
                        """
                    )
                else:
                    print(f"Error: {response.status_code}")
                    print(response.text)

            
        except Exception as e:
            await bot.reply(
                f"""
                API呼叫失敗：{e}
                """
            )
            print(f"Error occurred while calling the API: {e}")
            continue
            
    
