import { SPECIAL_TEAM_STATE_MAP, SCH_STATE_MAP, SPECIAL_TEAM_ID_MAP } from '../config';

function getFromBracketDesc(preNode: Record<string, any> = {}, roundInfo: Record<string, any>) {
  if (preNode === null) {
    return '轮空';
  }
  // console.log('preNode', preNode);
  const { round_type: roundType, bracket_id: bracketId } = preNode;
  const { round_type: nowRoundType } = roundInfo;
  const isWinner = roundType === 'winner';
  const postfixDesc = nowRoundType === 'loser' &&  isWinner ? '败者' : '胜者';

  return `${isWinner ? 'U' : 'L'}${bracketId}${postfixDesc}`;
}


/**
 * 1. 若 team_id = "999" 表示 “弃权”
   2. both_team_set < 3，team_id="" 表示“待定”
   3. both_team_set = 3	team_id = ""  表示 “轮空”
   4. both_team_set = 4 也表示双方待定
 */

// 获取队伍信息
export function getTeamInfo(
  nodeItem: Record<string, any> = {},
  pos: string,
  isPreview: number,
  roundInfo: Record<string, any>,
  teamMap: Record<string, any>,
) {
  // nodeItem.sch_score.teama_id = '0'
  // nodeItem.sch_score.teamb_id = '0'

  const schScore = nodeItem.sch_score || {};
  const bothTeamSet = nodeItem?.sch_dantao?.both_team_set || 0;
  const teamid = schScore[`team${pos}_id`];

  const teamInfo = {
    ...(teamMap[teamid] || {}),
  };

  let preTreeNode = [];

  try {
    preTreeNode = JSON.parse(nodeItem?.sch_rule?.pre_tree_node);
  } catch (e) {
    //
  }

  if (preTreeNode?.length) {
    const index = pos === 'a' ? 0 : 1;
    const fromBracketDesc = getFromBracketDesc(preTreeNode[index], roundInfo);
    teamInfo.fromBracketDesc = fromBracketDesc;
  }

  // 根据teamid和bothTeamSet，联合判断状态是轮空还是待定
  if (!teamid) {
    if (bothTeamSet == 4 || bothTeamSet < 3) {
      teamInfo.teamname = SPECIAL_TEAM_STATE_MAP.DAI_DING.name;
      teamInfo.teamavatar = SPECIAL_TEAM_STATE_MAP.DAI_DING.avatar;

      nodeItem.state = SPECIAL_TEAM_STATE_MAP.DAI_DING.state;
      nodeItem.specState = SPECIAL_TEAM_STATE_MAP.DAI_DING.specState;
    } else {
      teamInfo.teamname = SPECIAL_TEAM_STATE_MAP.LUN_KONG.name;
      teamInfo.teamavatar = SPECIAL_TEAM_STATE_MAP.LUN_KONG.avatar;

      nodeItem.state = SPECIAL_TEAM_STATE_MAP.LUN_KONG.state;
      nodeItem.specState = SPECIAL_TEAM_STATE_MAP.LUN_KONG.specState;
    }
  } else if (teamid == 999) {
    teamInfo.teamname = SPECIAL_TEAM_STATE_MAP.QUIT_RIGHT.name;
    teamInfo.specState = SPECIAL_TEAM_STATE_MAP.QUIT_RIGHT.specState;
    teamInfo.teamavatar = SPECIAL_TEAM_STATE_MAP.QUIT_RIGHT.avatar;
  } else {
    teamInfo.score = schScore[`team${pos}_score`] || 0;
  }

  // 裁判强制设置结果的，只有AdminResult有值，winner没有值
  if (nodeItem.admin_result && nodeItem.admin_result === teamid) {
    teamInfo.isWinner = 1;
  } else if (!nodeItem.admin_result && nodeItem.winner && nodeItem.winner === teamid) {
    teamInfo.isWinner = 1;
  }

  if ((nodeItem.admin_result == 999
      || (!nodeItem.admin_result && nodeItem.winner == 999))
    && teamInfo.teamname != SPECIAL_TEAM_STATE_MAP.QUIT_RIGHT.name // 不要显示两个弃字
  ) {
    teamInfo.specState =  SPECIAL_TEAM_STATE_MAP.QUIT_RIGHT.specState;
  }

  // 处理赛程状态
  nodeItem.status = SCH_STATE_MAP[(nodeItem.state || 0) as keyof typeof SCH_STATE_MAP];

  // 预赛程逻辑
  if (isPreview) {
    if (teamid === undefined) {
      schScore[`team${pos}_id`] = SPECIAL_TEAM_ID_MAP.PREVIEW_EMPTY;
      teamInfo.teamid = SPECIAL_TEAM_ID_MAP.PREVIEW_EMPTY;
    } else {
      schScore[`team${pos}_id`] = SPECIAL_TEAM_ID_MAP.PREVIEW;
      teamInfo.teamid = SPECIAL_TEAM_ID_MAP.PREVIEW;
    }
  }

  return teamInfo;
}


/**
 * 拉平队伍
 * @param {Array} teamList
 */
export function flattenTeamInfo(teamList: Array<any> = []) {
  return teamList.reduce((acc, item) => {
    acc[item.teamid] = item;
    return acc;
  }, {});
}


export const iFindTeam = (
  schInfo: Record<string, any>,
  myTeamId: string,
) => schInfo?.battleList?.[0]?.teamList?.[0]?.teamid == myTeamId
  || schInfo?.battleList?.[0]?.teamList?.[1]?.teamid == myTeamId;
