import { 
  BillingPaymentMethod, 
  BillingProcessResult, 
  BillingRequestStatus 
} from '@/entities/transaction/model/types';

export enum SuccessResult {
  SUCCESS = 'SUCCESS',
  FAIL = 'FAIL'
};
export enum FilterDateOptions {
  Today = 'Today',
  Week = 'Week',
  Month = 'Month',
  Input = 'Input'
};
export enum CalendarType {
  Start = 'Start',
  End = 'End'
};
export interface DefaultRequestPagination {
  cursor: string;
  size: number;
  sortBy: string;
  sortOrder: string;
  orderBy: string;
  limit: number;
};
export interface DefaulResponsePagination {
  nextCursor: string | null;
  hasNext: boolean;
};
export enum HeaderType {
  NoHeader = 'NoHeader',
  Home = 'Home',
  Alim = 'Alim',
  LeftArrow = 'LeftArrow',
  RightClose = 'RightClose',
};
export interface FilterRangeAmountProps {
  title?: string;
  minAmount?: number | string;
  maxAmount?: number | string;
  setMinAmount: (minAmount: number | string) => void;
  setMaxAmount: (maxAmount: number | string) => void;
};
export interface FilterButtonGroupsProps {
  title: string;
  activeValue?: string;
  btnGroups?: Array<ButtonItemProp>
  setter: (value: any) => void;
};
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;
};

export interface FooterProps {
  setMenuOn: (menuOn: boolean) => void;
  footerCurrentPage?: string | null;
};
export enum FooterItemActiveKey {
  Home = 'Home',
  Transaction = 'Transaction',
  Settlement = 'Settlement',
  Account = 'Account',
};
export interface CodesSelectParams {
  codeCl?: string;
  colNm?: string;
  code1?: string;
  code2?: string;
  useCl?: string;
  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 CodesListByCodeClResponse {
  codeList: Array<CodeListItem>;
};
export interface CodesGroupByCodeClParams {
  codeCl: string;
};
export interface CodesGroupByCodeClResponse extends CodeGroupItem {

}
export interface CodesCacheStatusResponse {
  additionalProp1: string;
  additionalProp2: string;
  additionalProp3: string;
};
export interface CodesCacheRefreshResponse {

};
export interface CodesCacheRefreshByCodeClParams {
  codeCl: string;
};
export interface CodesCacheRefreshByCodeClResponse {

};
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 {

};
export interface EmptyTokenAddSendCodeParams {
  usrid: string;
  password: string;
  authType: string;
  content: string;
};
export interface EmptyTokenAddSendCodeResponse {
  expiresIn: string;
  authCode: string;
};