import { app } from "../App";
import { Env, EnvCurrent } from "../Env";
import GBattleModeManager, { BattleMode, GBattleModeEvent } from "../battle/GBattleModeManager";
import { GAction } from "../consts/GAction";
import { GActionType } from "../consts/GActionType";
import { GUI } from "../ui/UIConfig";
import BaseAction from "./BaseAction";

export interface GPVPStart{
    leftTactical:string;                //左边玩家的阵法
    leftPets:{[key:number]:string};     //左边玩家的宠物
    rightTactical:string;               //右边玩家的阵法
    rightPets:{[key:number]:string};    //左边玩家的宠物
    leftPlayerId:number;                //左边的玩家Id
    rightPlayerId:number;               //右边的玩家Id
}


export interface GPVPText{
    text:string
}

export default class PVPAction extends BaseAction {

    onInit(){

        app.socket.on(GAction.C_MODE_PVP_START_WAIT,this.onModePVPStartWait,this);
        app.socket.on(GAction.C_MODE_PVP_END_WAIT,this.onModePVPEndWait,this);
        app.socket.on(GAction.C_MODE_PVP_START,this.onModePVPStart,this,GActionType.GPVPStart);
        app.socket.on(GAction.C_MODE_PVP_MESSAGE,this.onModePVPMessage,this,GActionType.GPVPText);

        if(EnvCurrent == Env.Server){
            app.socket.on(GAction.CR_REFEREE_PVP_MODE,this.onCrReferee,this,GActionType.GPVPStart); //监听PVP裁决
            app.event.on(GBattleModeEvent.Close,this.onBattleRefereeClose,this); //模式结束运行
        }

    }

    //PVP开始等待
    onModePVPStartWait(){
        console.log("onModePVPStartWait");
        //PVP 匹配页面
        app.layer.Open(GUI.PVPModeMatchView);
    }

    //PVP结束等待
    onModePVPEndWait(){
        console.log("onModePVPEndWait");
        //PVP 匹配页面
        app.layer.Close(GUI.PVPModeMatchView);
    }

    //开始PVP
    onModePVPStart(info:GPVPStart){
        console.log("开始PVP",info);
        app.layer.Close(GUI.PVPModeMatchView);
        GBattleModeManager.getIns().Open(BattleMode.PVP,true,info);
    }

    //裁决运行
    onCrReferee(info:GPVPStart){
        console.log("开始PVP裁决",info);
        GBattleModeManager.getIns().Open(BattleMode.PVP,false,info);
        GBattleModeManager.getIns().setAuto(true,true);
    }

    //提示
    onModePVPMessage(info:GPVPText){
        console.log("提示PVP",info);
        app.layer.Open(GUI.Tips,{text:info.text})
    }

    //裁决结束返回
    onBattleRefereeClose(type:BattleMode,data?:number){
        if(type == BattleMode.PVP){
            console.log("裁决结束胜利玩家",data)
            app.socket.Send(GAction.CR_REFEREE_PVP_END,{
                winnerId:data
            },GActionType.GPVPRefereeInfo)
        }
    }

}