import {
  CARD_BUTTON_CLASS,
  CARD_BUTTON_MAP,
} from './utils';


export function getSatisfiedAndCanInviteCardCustom({
  rawBattleList = [],
  curShowingBattleIndex = 0,
  enterBattleRoomDuration = 30,
}: {
  rawBattleList: Array<Record<string, any>>;
  curShowingBattleIndex?: number;
  enterBattleRoomDuration?: number;
}) {
  const rawCurBattle = rawBattleList[curShowingBattleIndex] || {};
  const {
    battle_status: battleStatus = 0,
    start_time: startTime,
    battle_id: battleId,
    can_enter_game: canEnterGame,
    enter_game_remain: enterGameRemain = 0,
  } = rawCurBattle;

  const isNotStart = battleStatus <= 100;
  const isIng = battleStatus == 200;

  const gap = startTime - Math.floor(Date.now() / 1000);
  const canEnterVirtualRoom = gap > 0 && gap <= enterBattleRoomDuration * 60;
  const hasNextBattle = rawBattleList.length > curShowingBattleIndex + 1;


  if (isNotStart) {
    if (canEnterVirtualRoom) {
      return {
        mainButton: CARD_BUTTON_MAP.INVITE_MEMBER,
        secondButton: CARD_BUTTON_MAP.TO_GROUPING,

        secondCountdown: startTime * 1000,
        secondButtonTips: '请在倒计时结束前进入备战房',
        secondButtonClass: CARD_BUTTON_CLASS.PRIMARY,
      };
    }

    return {
      mainButton: CARD_BUTTON_MAP.INVITE_MEMBER,
      secondButton: CARD_BUTTON_MAP.WAIT_START,

      secondCountdown: startTime * 1000,
      secondButtonTips: gap > 0
        ? '已满足参赛人数，倒计时结束后开赛'
        : '已满足参赛人数',
      secondButtonClass: CARD_BUTTON_CLASS.INVALID,
    };
  }
  if (isIng) {
    const getButton = () => {
      const groupGap = Math.floor(Date.now() / 1000) - startTime;
      const isGroupingStage = groupGap > 0 && groupGap < 5 * 60;

      if (canEnterGame == 1) {
        // 理论上不会出现
        return {
          secondButton: CARD_BUTTON_MAP.LAUNCH_GAME,

          secondCountdown: enterGameRemain * 1000 + Date.now(),
          secondButtonTips: enterGameRemain * 1000 > Date.now() ?  CARD_BUTTON_MAP.LAUNCH_GAME_TIP : '',
          secondButtonClass: CARD_BUTTON_CLASS.PRIMARY,
        };
      }
      if (isGroupingStage) {
        // 理论上不会出现
        return {
          secondButton: CARD_BUTTON_MAP.TO_GROUPING,

          secondButtonTips: CARD_BUTTON_MAP.JUMP_TO_ROOM_TIP,
          secondButtonClass: CARD_BUTTON_CLASS.PRIMARY,
        };
      }
      if (battleId) {
        // 理论上不会出现
        return {
          secondButton: '进行中',
          secondButtonTips: hasNextBattle ? '请等待下一局比赛开赛' : '',
          secondButtonClass: CARD_BUTTON_CLASS.INVALID,
        };
      }
      return {
        secondButton: '进行中',
        secondButtonTips: hasNextBattle ? '请等待下一局比赛开赛' : '',
        secondButtonClass: CARD_BUTTON_CLASS.INVALID,
      };
    };
    const {
      secondButton,

      secondCountdown = 0,
      secondButtonTips = '',
      secondButtonClass,
    } = getButton();

    return {
      mainButton: CARD_BUTTON_MAP.INVITE_MEMBER,
      secondButton,

      secondCountdown,
      secondButtonTips,
      secondButtonClass,
    };
  }

  return {
    mainButton: CARD_BUTTON_MAP.INVITE_MEMBER,
    secondButton: '已结束',

    secondCountdown: -1,
    secondButtonTips: '请等待下一局比赛开赛',
    secondButtonClass: CARD_BUTTON_CLASS.INVALID,
  };
}


export function getSatisfiedAndCannotInviteCardCustom({
  rawBattleList = [],
  curShowingBattleIndex = 0,
  enterBattleRoomDuration = 30,
}: {
  rawBattleList: Array<Record<string, any>>;
  curShowingBattleIndex?: number;
  enterBattleRoomDuration?: number
}) {
  const rawCurBattle = rawBattleList[curShowingBattleIndex] || {};
  const {
    battle_status: battleStatus = 0,
    can_enter_game: canEnterGame,
    start_time: startTime,
    battle_id: battleId,
    enter_game_remain: enterGameRemain = 0,
  } = rawCurBattle;
  const isNotStart = battleStatus <= 100;
  const isIng = battleStatus == 200;


  if (isNotStart) {
    const gap = startTime - Math.floor(Date.now() / 1000);
    if (gap > 0 && gap < enterBattleRoomDuration * 60) {
      return {
        title: CARD_BUTTON_MAP.BATTLE_WILL_START,
        mainButton: CARD_BUTTON_MAP.TO_GROUPING,

        mainButtonClass: CARD_BUTTON_CLASS.PRIMARY,
        mainButtonCountdown: startTime * 1000,
        buttonTips: CARD_BUTTON_MAP.JUMP_TO_ROOM_TIP,
      };
    }
    return {
      title: CARD_BUTTON_MAP.BATTLE_WILL_START,
      mainButton: CARD_BUTTON_MAP.WAIT_START,

      mainButtonClass: CARD_BUTTON_CLASS.INVALID,
      mainButtonCountdown: 0,
      buttonTips: CARD_BUTTON_MAP.WAIT_VIRTUAL_START_TIP,
    };
  }
  if (isIng) {
    const getButton = () => {
      const groupGap = Math.floor(Date.now() / 1000) - startTime;
      const isGroupingStage = groupGap > 0 && groupGap < 5 * 60;

      if (canEnterGame == 1) {
        return {
          title: '比赛已开启',
          mainButton: CARD_BUTTON_MAP.LAUNCH_GAME,
          mainButtonClass: CARD_BUTTON_CLASS.PRIMARY,
          mainButtonCountdown: enterGameRemain * 1000 + Date.now(),
          buttonTips: enterGameRemain * 1000 > Date.now() ?  CARD_BUTTON_MAP.LAUNCH_GAME_TIP : '',
        };
      }
      if (isGroupingStage) {
        return {
          title: '比赛已开启',
          mainButton: CARD_BUTTON_MAP.TO_GROUPING,
          mainButtonClass: CARD_BUTTON_CLASS.PRIMARY,
          buttonTips: CARD_BUTTON_MAP.JUMP_TO_ROOM_TIP,
        };
      }
      if (battleId) {
        return {
          title: '比赛进行中',
          mainButton: CARD_BUTTON_MAP.BATTLE_PLAYING,
          mainButtonClass: CARD_BUTTON_CLASS.INVALID,
        };
      }
      return {
        title: '比赛进行中',
        mainButton: CARD_BUTTON_MAP.NOT_ENTER_GAME,
        mainButtonClass: CARD_BUTTON_CLASS.INVALID,
      };
    };
    const {
      title,
      mainButton,
      mainButtonClass,
      mainButtonCountdown = 0,
      buttonTips,
    } = getButton();

    return {
      title,
      mainButton,

      mainButtonClass,
      mainButtonCountdown,
      buttonTips,
    };
  }

  return {
    title: '比赛已结束',
    mainButton: battleId ? '比赛已结束' : '您未出战',
    mainButtonClass: CARD_BUTTON_CLASS.INVALID,
    mainButtonCountdown: 0,
    buttonTips: '',
  };
}
