export enum AppLanguage {
  // DEVICE = 'DEVICE',
  KO = 'ko',
  EN = 'en'
};
export enum LoginType {
  ID = 'ID',
  BIOMETRIC = 'BIOMETRIC',
};
export enum SuccessResult {
  SUCCESS = 'SUCCESS',
  FAIL = 'FAIL'
};
export enum FilterDateOptions {
  Today = 'Today',
  Week = 'Week',
  Month = 'Month',
  Input = 'Input'
};
export enum FilterMonthOptions {
  Month1 = 'Month1',
  Month2 = 'Month2',
  Month3 = 'Month3',
  Input = 'Input'
};
export enum CalendarType {
  Start = 'Start',
  End = 'End',
  Single = 'Single'
};
export interface DefaultRequestPagination {
  cursor: string | null;
  size: number;
  sortType: SortTypeKeys;
};
export interface DefaulResponsePagination {
  nextCursor: string | null;
  hasNext: boolean;
};
export enum HeaderType {
  NoHeader = 'NoHeader',
  Home = 'Home',
  Alim = 'Alim',
  LeftArrow = 'LeftArrow',
  RightClose = 'RightClose',
};
export enum AltMsgKeys {
  Fold = '접기',
  UnFold = '펼치기',
};
export interface FilterRangeAmountProps {
  title?: string;
  minAmount?: number;
  maxAmount?: number;
  setMinAmount: (minAmount?: number) => void;
  setMaxAmount: (maxAmount?: number) => void;
};
export interface FilterButtonGroupsProps {
  title: string;
  activeValue?: string;
  btnGroups?: Array<ButtonItemProp>
  setter: (value: any) => void;
  addClassName?: string;
  maxBtn?: 2 | 4;
};
export interface ButtonItemProp {
  name?: string;
  value?: string;
};
export interface HeaderNavigationProps {
  onBack?: (() => void) | undefined;
  headerTitle?: string;
  headerLeft?: React.ReactNode;
  headerRight?: React.ReactNode;
  menuOn: boolean;
  headerType: HeaderType;
  setMenuOn: (menuOn: boolean) => void;
  favoriteEdit?: boolean;
  loginSuccess: boolean;
  mid?: string;
  setMid: (mid: string) => void;
};

export interface FooterProps {
  setMenuOn: (menuOn: boolean) => void;
  footerCurrentPage?: string | null;
  setFavoriteEdit: (favoriteEdit: boolean) => void;
};
export enum FooterItemActiveKey {
  Home = 'Home',
  Transaction = 'Transaction',
  Settlement = 'Settlement',
  Account = 'Account',
};
export enum SortTypeKeys {
  LATEST = 'LATEST',
  OLDEST = 'OLDEST',
  HIGH_AMOUNT = 'HIGH_AMOUNT',
  LOW_AMOUNT = 'LOW_AMOUNT'
};
export interface SortTypeBoxProps {
  sortType: SortTypeKeys;
  onClickToSort: (sortType: SortTypeKeys) => void;
  sortOptions?: Array<{key: SortTypeKeys, label: string}>;
};

export interface CodesSelectParams {
  codeCl?: string;
  colNm?: string;
  code1?: string;
  code2?: string;
  useCl?: number;
  method: 'get' | 'post';
};
export interface CodeListItem {
  codeCl: string;
  code1: string;
  code2: string;
  desc1: string;
  desc2: string;
  desc3: string;
  encDesc1: string;
  encDesc2: string;
  encDesc3: string;
  colNm: string;
  orderNo: number;
};
export interface CodeGroupItem {
  groupCode: string;
  groupType: string;
  groupName: string;
  codeList: Array<CodeListItem>;
};
export interface CodesSelectGetResponse {
  codeGroups: Array<CodeGroupItem>;
};
export interface CodesSelectPostResponse {
  codeList: Array<CodeListItem>;
};
export interface CodesListByCodeClParams {
  codeCl: string;
};

export interface CodesGroupByCodeClParams {
  codeCl: string;
};
export interface CodesGroupByCodeClResponse extends CodeGroupItem {
  status: boolean;
  error?: ErrorResponse;
}
export interface CodesCacheStatusResponse {
  additionalProp1: string;
  additionalProp2: string;
  additionalProp3: string;
};
export interface CodesCacheRefreshResponse {
  status: boolean;
  error?: ErrorResponse;
};
export interface CodesCacheRefreshByCodeClParams {
  codeCl: string;
};
export interface CodesCacheRefreshByCodeClResponse {
  status: boolean;
  error?: ErrorResponse;
};
export interface EmptyTokenVerifyCodeParams {
  usrid: string;
  authType: string;
  content: string;
  authCode: string;
};
export interface EmptyTokenVerifyCodeResponse {
  tfaId: string;
  valid: boolean;
};
export interface EmptyTokenFindSendCodeParams {
  usrid: string;
  password: string;
  authType: string;
  content: string;
};
export interface EmptyTokenFindSendCodeResponse {
  expiresIn: string;
  authCode: string;
};
export interface EmptyTokenChangeParams {
  usrid: string;
  password: string;
  tfaId: string;
  newPassword: string;
  newConfirmPassword: string;
};
export interface EmptyTokenChangeResponse {
  status: boolean;
  error?: ErrorResponse;
};
export interface EmptyTokenAddSendCodeParams {
  usrid: string;
  password: string;
  authType: string;
  content: string;
};
export interface EmptyTokenAddSendCodeResponse {
  expiresIn: string;
  authCode: string;
};

export interface SectionArrowProps {
  isOpen?: boolean;
};
export interface BannerInfo {
  HomneBottomBanner: boolean;
};

export interface ErrorResponse {
  root: string;
  errKey: string;
  code: string;
  message: string;
  timestamp: string;
  details: Record<string, string>;
}