import { timeStampFormat } from 't-comm/es/time/time';

import { t } from '../../locale';
import {
  START_BATTLE_CODE_MAP,
  START_BATTLE_TITLE_MAP,
  SCHEDULE_STATUS_MAP,
  SCHEDULE_CUSTOM_STATUS_MAP,
} from '../config';


export function isSchEnd(scheGroup: Record<string, any>) {
  const { rawState } = scheGroup.nodeItem || {};
  if (rawState === SCHEDULE_STATUS_MAP.ENDED) {
    return true;
  }
  return [
    SCHEDULE_STATUS_MAP.ENDED,
    SCHEDULE_CUSTOM_STATUS_MAP.EMPTY,
  ].includes(scheGroup.realStatus);
}

export function isSchPlaying(realStatus: number, isNotStart: boolean) {
  return [SCHEDULE_STATUS_MAP.PLAYING].includes(realStatus as 100) && !isNotStart;
}

export function isScheNotStart(realStatus: number) {
  return realJudgeScheNotStart(realStatus);
}

function realJudgeScheNotStart(realStatus: number) {
  return [
    undefined,
    SCHEDULE_STATUS_MAP.NOT_START,
    SCHEDULE_STATUS_MAP.STARTED,
    SCHEDULE_CUSTOM_STATUS_MAP.PENDING,
  ].includes(realStatus as any);
}


/**
 * 获取未开始的不同文案
 *
 * 未开始=人满开赛
 * 未开始=待管理员开赛+上场中
 * 未开始=10/30 19:00开赛+上场中
 *
 * 人满开赛=上场中=已开赛、10人未准备
 *
 * 区分点就是，开赛前/开赛后
 *
 */
export function getReadyInfoDesc({
  roundInfo = {},
  scheGroup = {},
}) {
  const {
    latest_ready_time: latestReadyTime,
    start_battle_type: startBattleType,
  } = roundInfo as Record<string, any>;
  const { realStatus } = scheGroup as Record<string, any>;

  const startBattleTypeDesc = getStartBattleTypeDesc(roundInfo);

  const curBo = (scheGroup as Record<string, any>)?.nodeItem?.sch_score?.cur_bo || 0;
  if (curBo > 1) {
    return t('scheduleTree.joining');
  }

  if (startBattleType == START_BATTLE_CODE_MAP.AUTO) {
    return startBattleTypeDesc;
  }

  if (realStatus == SCHEDULE_STATUS_MAP.STARTED) {
    if (!latestReadyTime) {
      return t('scheduleTree.joining');
    }
    return t('scheduleTree.joiningAndTimeoutAutoQuit');
  }
  return startBattleTypeDesc;
}

/**
 * 获取开赛方式描述
 */
export function getStartBattleTypeDesc(roundInfo: Record<string, any>) {
  const {
    show_stime: startTime,
    start_battle_type: startBattleType,
  } = roundInfo || {};
  if (startBattleType === START_BATTLE_CODE_MAP.ON_TIME) {
    return timeStampFormat(startTime, t('scheduleTree.startMatchOnTime'));
  }

  return START_BATTLE_TITLE_MAP[startBattleType as keyof typeof START_BATTLE_TITLE_MAP];
}


