import { PageFooterText, pageFooterZhCn, pageFooterEnUs } from './PageFooter';
import { MainPageText, mainPageZhCn, mainPageEnUs } from './MainPage';
import { UserPageText, userPageZhCn, userPageEnUs } from './UserPage';
import { TabBarText, tabBarEnUs, tabBarZhCn } from './TabBar';
import { ReportPageText, reportPageEnUs, reportPageZhCn } from './ReportPage';
import { InformPageText, informPageZhCn, informPageEnUs } from './InformPage';
import { AboutPageText, aboutPageEnUs, aboutPageZhCn } from './AboutPage';
import { ButtonText, buttonEnUs, buttonZhCn } from './Button';
import { MemberPageText, memberPageEnUs, memberPageZhCn } from './MemberPage';
import { TicketListText, ticketListEnUs, ticketListZhCn } from './TicketList';
import { NavBarTitle, navBarTitleEnUs, navBarTitleZhCh } from './NavBarTitle';
import { RepairPageText, repairPageEnUs, repairPageZhCn } from './RepairPage';
import {
  TicketDetailText,
  ticketDetailEnUs,
  ticketDetailZhCn,
} from './TicketDetail';
import { CommonText, commonTextEnUs, commonTextZhCn } from './common';

interface TextRecord {
  common: CommonText;
  pageFooter: PageFooterText;
  mainPage: MainPageText;
  userPage: UserPageText;
  tabBar: TabBarText;
  reportPage: ReportPageText;
  informPage: InformPageText;
  aboutPage: AboutPageText;
  button: ButtonText;
  memberPage: MemberPageText;
  ticketList: TicketListText;
  navBar: NavBarTitle;
  repairPage: RepairPageText;
  ticketDetail: TicketDetailText;
}

const textZhCn: TextRecord = {
  common: commonTextZhCn,
  pageFooter: pageFooterZhCn,
  mainPage: mainPageZhCn,
  userPage: userPageZhCn,
  tabBar: tabBarZhCn,
  reportPage: reportPageZhCn,
  informPage: informPageZhCn,
  aboutPage: aboutPageZhCn,
  button: buttonZhCn,
  memberPage: memberPageZhCn,
  ticketList: ticketListZhCn,
  navBar: navBarTitleZhCh,
  repairPage: repairPageZhCn,
  ticketDetail: ticketDetailZhCn,
};

const textEnUs: TextRecord = {
  common: commonTextEnUs,
  pageFooter: pageFooterEnUs,
  mainPage: mainPageEnUs,
  userPage: userPageEnUs,
  tabBar: tabBarEnUs,
  reportPage: reportPageEnUs,
  informPage: informPageEnUs,
  aboutPage: aboutPageEnUs,
  button: buttonEnUs,
  memberPage: memberPageEnUs,
  ticketList: ticketListEnUs,
  navBar: navBarTitleEnUs,
  repairPage: repairPageEnUs,
  ticketDetail: ticketDetailEnUs,
};

// type Lang = 'zh_CN' | 'en_US' | ...;
export type Lang = 'zh_CN' | 'en_US';

class PlainText {
  private readonly textZhCn: TextRecord;
  private readonly textEnUs: TextRecord;
  private lang: Lang;

  constructor() {
    this.textZhCn = textZhCn;
    this.textEnUs = textEnUs;
    this.lang = 'zh_CN';
  }

  setLang(lang: Lang) {
    this.lang = lang;
  }

  get(): TextRecord {
    if (this.lang == 'zh_CN') {
      return this.textZhCn;
    } else if (this.lang == 'en_US') {
      return this.textEnUs;
    }
    return this.textZhCn;
  }

  getCurLang(): Lang {
    return this.lang;
  }
}

const pt = new PlainText();

export default pt;
