import {
  BATTLE_STATE_MAP,
  REMATCH_STATE_MAP,
  // SCHEDULE_CUSTOM_STATUS_MAP,
  SCHEDULE_STATUS_MAP,
} from '../config';
// import { timeStampFormat } from 't-comm/es/time/time';

enum MiddleCodeEnum {
  end = 'end',
  ing = 'ing',
  entering = 'entering',
  notStart = 'notStart',
}

export function mapBattleStatus(status: any) {
  if (status <= BATTLE_STATE_MAP.WAIT_CREATE_ROOM) {
    return MiddleCodeEnum.entering;
  }
  if (status > BATTLE_STATE_MAP.WAIT_CREATE_ROOM && status <= BATTLE_STATE_MAP.IN_BATTLE) {
    return MiddleCodeEnum.ing;
  }
  if (status >= BATTLE_STATE_MAP.ENDED_READING_DATA && status <= BATTLE_STATE_MAP.ENDED) {
    return MiddleCodeEnum.end;
  }
  return MiddleCodeEnum.notStart;
}

function getBattleStatus({
  battleState = 0,
  battleList = [],
  curBo = 0,
}: {
  battleState?: number,
  battleList?: Array<any>,
  curBo?: number,
}) {
  if (battleState === 0
    || ((battleList?.length === curBo)
        && battleList?.[battleList?.length - 1]?.battle_state === BATTLE_STATE_MAP.ENDED)
    || battleList?.length <= 0
  ) {
    return MiddleCodeEnum.notStart;
  }
  return mapBattleStatus(battleState);
}


/**
 * timeDesc: 赛程树用，结束时间
 * statusDesc: 赛程树用，描述
 * playingDesc: 赛程树和列表视图用，用于比赛中+图标
 * listViewStatusDesc: 列表视图用，用于比赛中+图标
 * battleDesc: 操作面板用
 */
function getStatusDescInner({
  code,
  // time,
  isManualStart = false,
}: {
  code: MiddleCodeEnum;
  time?: number;
  isManualStart: boolean;
}) {
  if (code === MiddleCodeEnum.end) {
    // const timeDesc = timeStampFormat(time, 'M/d hh:mm');
    return {
      timeDesc: '',
      statusDesc: '已结束',
      playingDesc: '',

      listViewStatusDesc: '已结束',
      battleDesc: '已结束',
    };
  }

  if (code === MiddleCodeEnum.ing) {
    return {
      timeDesc: '',
      statusDesc: '',
      playingDesc: '比赛中',

      listViewStatusDesc: '',
      battleDesc: '比赛中',
    };
  }

  if  (code === MiddleCodeEnum.entering) {
    return {
      timeDesc: '',
      statusDesc: '上场中',
      playingDesc: '',

      listViewStatusDesc: '上场中',
      battleDesc: '上场中',
    };
  }

  if (code === MiddleCodeEnum.notStart) {
    const desc = isManualStart ? '待管理员开赛' : '未开始';
    return {
      timeDesc: '',
      statusDesc: desc,
      playingDesc: '',

      listViewStatusDesc: desc,
      battleDesc: '未开始',
    };
  }
  return {
    timeDesc: '',
    statusDesc: '',
    playingDesc: '',

    listViewStatusDesc: '',
    battleDesc: '',
  };
}


export function getGpBattleState({
  state = 0,
  battleState = 0,
  curBo = 0,
  battleList = [],
  isManualStart = false,
  time = 0,
}) {
  const code = getMiddleCode({
    state,
    battleState,
    curBo,
    battleList,
  });

  return getStatusDescInner({
    code,
    time,
    isManualStart,
  });
}

function getMiddleCode({
  state = 0,
  battleState = 0,
  curBo = 0,
  battleList = [],
}) {
  if ([SCHEDULE_STATUS_MAP.ENDED].includes(state as any)) {
    return MiddleCodeEnum.end;
  }

  if (!state) {
    return MiddleCodeEnum.notStart;
  }


  if (battleState && !battleList?.length) {
    // 对应 list-view 数据，没有 battle_list，只有 battle_state
    return mapBattleStatus(battleState);
  }
  if (battleList?.length) {
    const rNode: Record<string, any> = battleList.find((item: any) => {
      if (item.bonum === curBo && +item.rematch_state !== REMATCH_STATE_MAP.REMATCH) {
        return true;
      }
    }) || {};
    return rNode ? getBattleStatus({
      battleState: rNode.battle_state,
      battleList,
      curBo,
    }) : MiddleCodeEnum.notStart;
  }
  return MiddleCodeEnum.notStart;
}
