import type { CampaignStep } from '../state/campaignState';
import {
  defaultBattleScenario,
  eighthBattleScenario,
  fifthBattleScenario,
  fourthBattleScenario,
  ninthBattleScenario,
  secondBattleScenario,
  seventhBattleScenario,
  sixthBattleScenario,
  tenthBattleScenario,
  thirdBattleScenario,
  type BattleScenarioId
} from './battles';
import {
  eighthBattleIntroPages,
  eighthBattleVictoryPages,
  fifthBattleIntroPages,
  fifthBattleVictoryPages,
  firstBattleVictoryPages,
  fourthBattleIntroPages,
  fourthBattleVictoryPages,
  ninthBattleIntroPages,
  ninthBattleVictoryPages,
  secondBattleIntroPages,
  secondBattleVictoryPages,
  seventhBattleIntroPages,
  seventhBattleVictoryPages,
  sixthBattleIntroPages,
  sixthBattleVictoryPages,
  tenthBattleIntroPages,
  tenthBattleVictoryPages,
  thirdBattleIntroPages,
  thirdBattleVictoryPages,
  type StoryPage
} from './scenario';

export type SortieFlow = {
  afterBattleId: string;
  eyebrow: string;
  title: string;
  description: string;
  rewardHint: string;
  nextBattleId?: BattleScenarioId;
  campaignStep?: CampaignStep;
  pages: StoryPage[];
  unavailableNotice?: string;
};

const sortieFlows: Record<string, SortieFlow> = {
  [defaultBattleScenario.id]: {
    afterBattleId: defaultBattleScenario.id,
    eyebrow: '다음 전장',
    title: secondBattleScenario.title,
    description: '탁현을 물러난 황건 잔당이 인근 마을을 위협하고 있습니다. 의용군은 첫 승리의 기세를 몰아 추격에 나섭니다.',
    rewardHint: '예상 보상: 군자금, 소모품, 의용군 명성',
    nextBattleId: secondBattleScenario.id,
    campaignStep: 'second-battle',
    pages: [...firstBattleVictoryPages, ...secondBattleIntroPages]
  },
  [secondBattleScenario.id]: {
    afterBattleId: secondBattleScenario.id,
    eyebrow: '다음 전장',
    title: thirdBattleScenario.title,
    description: '탁현을 넘어 광종으로 향하는 길목에서 황건 전령이 관군의 움직임을 본대로 전하려 합니다. 강가 요새와 좁은 길을 돌파해야 합니다.',
    rewardHint: `예상 보상: ${thirdBattleScenario.title} 개방`,
    nextBattleId: thirdBattleScenario.id,
    campaignStep: 'third-battle',
    pages: [...secondBattleVictoryPages, ...thirdBattleIntroPages]
  },
  [thirdBattleScenario.id]: {
    afterBattleId: thirdBattleScenario.id,
    eyebrow: '다음 전장',
    title: fourthBattleScenario.title,
    description: '광종 구원로를 연 의용군은 이제 황건 본영을 향합니다. 장각을 격파해 황건적 토벌의 큰 고비를 넘겨야 합니다.',
    rewardHint: `예상 보상: ${fourthBattleScenario.title} 개방`,
    nextBattleId: fourthBattleScenario.id,
    campaignStep: 'fourth-battle',
    pages: [...thirdBattleVictoryPages, ...fourthBattleIntroPages]
  },
  [fourthBattleScenario.id]: {
    afterBattleId: fourthBattleScenario.id,
    eyebrow: '다음 전장',
    title: fifthBattleScenario.title,
    description: '황건적 토벌로 이름을 알린 세 형제는 반동탁 연합의 흐름에 몸을 싣습니다. 공손찬의 진영으로 향하는 길목에서 사수관 전초 병력을 상대해야 합니다.',
    rewardHint: `예상 보상: ${fifthBattleScenario.title} 개방`,
    nextBattleId: fifthBattleScenario.id,
    campaignStep: 'fifth-battle',
    pages: [...fourthBattleVictoryPages, ...fifthBattleIntroPages]
  },
  [fifthBattleScenario.id]: {
    afterBattleId: fifthBattleScenario.id,
    eyebrow: '다음 전장',
    title: sixthBattleScenario.title,
    description: '공손찬의 군영에 의탁한 세 형제는 북방 전선의 보급로를 지키는 임무를 맡습니다. 계교로 향하는 길목에서 원소군 별동대를 상대해야 합니다.',
    rewardHint: `예상 보상: ${sixthBattleScenario.title} 개방`,
    nextBattleId: sixthBattleScenario.id,
    campaignStep: 'sixth-battle',
    pages: [...fifthBattleVictoryPages, ...sixthBattleIntroPages]
  },
  [sixthBattleScenario.id]: {
    afterBattleId: sixthBattleScenario.id,
    eyebrow: '다음 전장',
    title: seventhBattleScenario.title,
    description: '계교 원군로를 열어 공손찬의 신뢰를 얻은 유비군에게 서주의 도겸이 원군을 청합니다. 조조군 선봉을 밀어내고 서주 피난로를 열어야 합니다.',
    rewardHint: `예상 보상: ${seventhBattleScenario.title} 개방`,
    nextBattleId: seventhBattleScenario.id,
    campaignStep: 'seventh-battle',
    pages: [...sixthBattleVictoryPages, ...seventhBattleIntroPages]
  },
  [seventhBattleScenario.id]: {
    afterBattleId: seventhBattleScenario.id,
    eyebrow: '다음 전장',
    title: eighthBattleScenario.title,
    description: '도겸에게 서주를 맡은 뒤 첫 과제는 소패 보급로를 지키는 일입니다. 여포군의 그림자가 드리우기 전에 새로 합류한 장수들과 방위선을 세워야 합니다.',
    rewardHint: `예상 보상: ${eighthBattleScenario.title} 개방`,
    nextBattleId: eighthBattleScenario.id,
    campaignStep: 'eighth-battle',
    pages: [...seventhBattleVictoryPages, ...eighthBattleIntroPages]
  },
  [eighthBattleScenario.id]: {
    afterBattleId: eighthBattleScenario.id,
    eyebrow: '다음 전장',
    title: ninthBattleScenario.title,
    description: '여포를 의탁시킨 뒤 서주 성문 안팎의 불안이 터집니다. 조표의 야습을 막아 성문을 지켜내야 합니다.',
    rewardHint: `예상 보상: ${ninthBattleScenario.title} 개방`,
    nextBattleId: ninthBattleScenario.id,
    campaignStep: 'ninth-battle',
    pages: [...eighthBattleVictoryPages, ...ninthBattleIntroPages]
  },
  [ninthBattleScenario.id]: {
    afterBattleId: ninthBattleScenario.id,
    eyebrow: '다음 전장',
    title: tenthBattleScenario.title,
    description: '장비의 성급함과 여포의 야심이 맞물려 서주는 무너집니다. 성을 되찾기보다 포위망을 뚫고 다음 길을 찾는 전투가 됩니다.',
    rewardHint: `예상 보상: ${tenthBattleScenario.title} 개방`,
    nextBattleId: tenthBattleScenario.id,
    campaignStep: 'tenth-battle',
    pages: [...ninthBattleVictoryPages, ...tenthBattleIntroPages]
  },
  [tenthBattleScenario.id]: {
    afterBattleId: tenthBattleScenario.id,
    eyebrow: '다음 장 준비',
    title: '조조 의탁의 길',
    description: '서주를 잃은 유비군은 살아남은 병력과 백성을 추슬러 허도로 향할 길을 찾습니다. 다음 흐름은 조조 의탁과 그 안의 긴장으로 이어집니다.',
    rewardHint: '다음 장: 조조 의탁 준비 중',
    pages: tenthBattleVictoryPages,
    unavailableNotice: '조조 의탁 장은 다음 작업에서 이어집니다. 군영에서 성장과 출전 구성을 정비하십시오.'
  }
};

export function getSortieFlow(latestBattleId?: string) {
  return sortieFlows[latestBattleId ?? defaultBattleScenario.id] ?? sortieFlows[defaultBattleScenario.id];
}
