from typing import Dict

from core.config import CoreConfig
from titles.mai2.buddiesplus import Mai2BuddiesPlus
from titles.mai2.const import Mai2Constants
from titles.mai2.config import Mai2Config


class Mai2Prism(Mai2BuddiesPlus):
    def __init__(self, cfg: CoreConfig, game_cfg: Mai2Config) -> None:
        super().__init__(cfg, game_cfg)
        self.version = Mai2Constants.VER_MAIMAI_DX_PRISM

    async def handle_cm_get_user_preview_api_request(self, data: Dict) -> Dict:
        user_data = await super().handle_cm_get_user_preview_api_request(data)

        # hardcode lastDataVersion for CardMaker
        user_data["lastDataVersion"] = "1.50.00"
        return user_data


    async def handle_get_user_new_item_list_api_request(self, data: Dict) -> Dict:
        return {
            "user_id": data["userId"],
            "userItemList": []
        }

    #seems to be used for downloading music scores online
    async def handle_get_game_music_score_api_request(self, data: Dict) -> Dict:
        return {
            "gameMusicScore": {
                "musicId": data["musicId"],
                "level": data["level"],
                "type": data["type"],
                "scoreData": ""
            }
        }

    async def handle_get_game_kaleidx_scope_api_request(self, data: Dict) -> Dict:
        return {
            "gameKaleidxScopeList": [
                {"gateId": 1, "phaseId": 6},
                {"gateId": 2, "phaseId": 6},
                {"gateId": 3, "phaseId": 6},
                {"gateId": 4, "phaseId": 6},
                {"gateId": 5, "phaseId": 6},
                {"gateId": 6, "phaseId": 6}
            ]
        }

    async def handle_get_user_kaleidx_scope_api_request(self, data: Dict) -> Dict:
        kaleidxscope = await self.data.score.get_user_kaleidxscope_list(data["userId"])

        if kaleidxscope is None:
            return {"userId": data["userId"], "userKaleidxScopeList":[]}

        kaleidxscope_list = []
        for kaleidxscope_data in kaleidxscope:
            tmp = kaleidxscope_data._asdict()
            tmp.pop("user")
            tmp.pop("id")
            kaleidxscope_list.append(tmp)
        return {
            "userId": data["userId"],
            "userKaleidxScopeList": kaleidxscope_list
        }