import { DefaulResponsePagination } from '@/entities/common/model/types';

export enum FundTransferTabKeys {
  RequestList = 'RequestList',
  ResultInquiry = 'ResultInquiry'
};
export interface FundTransferTabProps {
  activeTab: FundTransferTabKeys;
};
export enum LinkPaymentTabKeys {
  ShippingHistory = 'ShippingHistory',
  PendingSend = 'PendingSend'
};
export interface LinkPaymentTabProps {
  activeTab: LinkPaymentTabKeys;
};
export enum SettlementAgencyTabKeys {
  Manage = 'Manage',
  Deposit = 'Deposit',
  Member = 'Member',
};
export enum SortByKeys {
  New = 'New',
  Amount = 'Amount',
};
export enum ProcessResult {
  ALL = 'ALL',
  SUCCESS = 'SUCCESS',
  FAILURE = 'FAILURE'
};
export enum KeyInPaymentTransactionStatus {
  ALL = 'ALL',
  APPROVE = 'APPROVE',
  BF_CANCEL = 'BF_CANCEL',
  AF_CANCEL = 'AF_CANCEL'
}
export enum AccountHolderSearchType {
  ALL = 'ALL',
  ACCOUNT_HOLDER = 'ACCOUNT_HOLDER',
  ACCOUNT_NUMBER = 'ACCOUNT_NUMBER'
};
export enum LinkPaymentSearchType {
  ALL = "ALL",
  PHONE = "PHONE",
  EMAIL = "EMAIL"
};
export enum LinkPaymentSendMethod {
  ALL = "ALL",
  SMS = "SMS",
  EMAIL = "EMAIL",
  KAKAO = "KAKAO"
};
export enum LinkPaymentTransactionStatus {
  ALL = "ALL",
  ACTIVATE = "ACTIVATE",
  DEPOSIT_REQUEST = "DEPOSIT_REQUEST",
  TRANSACTION_COMPLETE = "TRANSACTION_COMPLETE",
  TRANSACTION_FAIL = "TRANSACTION_FAIL",
  INACTIVE = "INACTIVE"
}
export enum LinkPaymentSendingStatus {
  ALL = "ALL",
  SEND_REQUEST = "SEND_REQUEST",
  SEND_CANCEL = "SEND_CANCEL"
}

export interface SortOptionsBoxProps {
  sortBy: SortByKeys;
  onClickToSort: (sortBy: SortByKeys) => void;
};
export interface SettlementAgencyTabProps {
  activeTab: SettlementAgencyTabKeys;
};
export interface ExtensionRequestParams {
  mid: string;
};
export interface ExtensionSmsResendParams extends ExtensionRequestParams {
  tid: string;
};
export interface ExtensionSmsResendResponse {

};
export interface ExtensionSmsListParams extends ExtensionRequestParams {
  tid: string;
  searchCl: string;
  searchValue: string;
  fromDate: string;
  toDate: string;
  smsCl: string;
};
export interface ExtensionSmsListItemProps {
  mid: string;
  tid: string;
  paymentDate: string;
  paymentStatus: string;
  smsCl: string;
};
export interface ExtensionSmsListResponse extends DefaulResponsePagination {
  content: Array<ExtensionSmsListItemProps>
};
export interface ExtensionSmsDownloadExcelParams extends ExtensionRequestParams {
  searchCl: string;
  searchValue: string;
  fromDate: string;
  toDate: string;
  smsCl: string;
};
export interface ExtensionSmsDownloadExcelResponse {

};
export interface ExtensionSmsDetailParams extends ExtensionRequestParams {
  tid: string;
};
export interface ExtensionSmsDetailResponse {
  senderNumber: string;
  senderName: string;
  receiverNumber: string;
  receiverName: string;
  sendMessage: string;
};
export interface ExtensionListParams extends ExtensionRequestParams {

};
export interface activeExtensionListItem {
  extensionCode: string;
  extensionName: string;
  extensionInformation: string;
};
export interface availableExtensionListItem {
  extensionCode: string;
  extensionName: string;
  extensionInformation: string;
};
export interface ExtensionListItemProps {
  activeExtensionList: Array<activeExtensionListItem>;
  availableExtensionList: Array<availableExtensionListItem>;
};
export interface ExtensionListResponse extends DefaulResponsePagination {
  content: Array<ExtensionListItemProps>
};
export interface ExtensionKeyinListParams extends ExtensionRequestParams {
  fromDate: string;
  toDate: string;
  paymentStatus: string;
  minAmount: number;
  maxAmount: number;
};
export interface ExtensionKeyinListItemProps {
  tid: string;
  paymentDate: string;
  paymentStatus: string;
  amount: number;
};
export interface ExtensionKeyinListResponse extends DefaulResponsePagination {
  content: Array<ExtensionKeyinListItemProps>
};
export interface ExtensionKeyinDownloadExcelParams extends ExtensionRequestParams {
  fromDate: string;
  toDate: string;
  paymentStatus: string;
  minAmount: number;
  maxAmount: number;
};
export interface ExtensionKeyinDownloadExcelResponse {

};
export interface ExtensionKeyinApplyParams extends ExtensionRequestParams {
  goodsName: string;
  amount: number;
  buyerName: string;
  email: string;
  phoneNumber: string;
  cardNo: string;
  cardExpirationDate: string;
  instmntMonth: string;
  moid: string;
};
export interface ExtensionKeyinApplyResponse {

};
export interface ExtensionArsResendParams extends ExtensionRequestParams {
  tid: string;
};
export interface ExtensionArsResendResponse {

};
export interface ExtensionArsListParams extends ExtensionRequestParams {
  moid: string;
  fromDate: string;
  toDate: string;
  paymentStatus: string;
  orderStatus: string;
  minAmount: number;
  maxAmount: number;
};
export interface ExtensionArsListItemProps {
  tid: string;
  paymentDate: string;
  paymentStatus: string;
  orderStatus: string;
  arsPaymentMethod: string;
  amount: number;
};
export interface ExtensionArsListResponse extends DefaulResponsePagination {
  content: Array<ExtensionArsListItemProps>
};
export interface ExtensionArsDownloadExcelParams extends ExtensionRequestParams {
  moid: string;
  fromDate: string;
  toDate: string;
  paymentStatus: string;
  orderStatus: string;
  minAmount: number;
  maxAmount: number;
};
export interface ExtensionArsDownloadExcelResponse {

};
export interface ExtensionArsDetailParams extends ExtensionRequestParams {
  tid: string;
};
export interface ExtensionArsDetailResponse {
  corpName: string;
  mid: string;
  arsPaymentMethod: string;
  paymentStatus: string;
  orderStatus: string;
  paymentDate: string;
  goodsName: string;
  tid: string;
  buyerName: string;
  phoneNumber: string;
  maskPhoneNumber: string;
  email: string;
  smsVerificationCode: string;
};
export interface ExtensionArsApplyParams extends ExtensionRequestParams {
  moid: string;
  goodsName: string;
  amount: number;
  instmntMonth: string;
  buyerName: string;
  phoneNumber: string;
  email: string;
  arsPaymentMethod: string;
};
export interface ExtensionArsApplyResponse {

};
export interface SendMerchantInfoItem {
  cardApprovalFlag: boolean;
  cardCancelFlag: boolean;
  bankApprovalFlag: boolean;
  bankCancelFlag: boolean;
  virtureAccountDepositRequestFlag: boolean;
  virtureAccountDepositCompleteFlag: boolean;
  virtureAccountRefundFlag: boolean;
};
export interface SendUserInfoItem {
  cardApprovalFlag: boolean;
  cardCancelFlag: boolean;
  bankApprovalFlag: boolean;
  bankCancelFlag: boolean;
  virtureAccountDepositRequestFlag: boolean;
  virtureAccountDepositCompleteFlag: boolean;
  virtureAccountRefundFlag: boolean;
};
export interface ExtensionAlimtalkSettingSaveParams extends ExtensionRequestParams {
  sendMerchantInfo: SendMerchantInfoItem;
  sendUserInfo: SendUserInfoItem;
};
export interface ExtensionAlimtalkSettingSaveResponse {

};
export interface ExtensionAlimtalkSettingDetailParams extends ExtensionRequestParams {

};
export interface ExtensionAlimtalkSettingDetailItem {
  sendMerchantInfo: SendMerchantInfoItem;
  sendUserInfo: SendUserInfoItem;
};
export interface ExtensionAlimtalkSettingDetailResponse extends DefaulResponsePagination {
  content: Array<ExtensionAlimtalkSettingDetailItem>
};
export interface ExtensionAlimtalkListParams extends ExtensionRequestParams {
  searchCl: string;
  searchValue: string;
  paymentMethod: string;
  alimCl: string;
  fromDate: string;
  toDate: string;
  sendType: string;
  sendCl: string;
};
export interface ExtensionAlimtalkListItem {
  tid: string;
  sendDate: string;
  alimCl: string;
  sendType: string;
  sendCl: string;
  paymentMethod: string;
  receiverName: string;
};
export interface ExtensionAlimtalkListResponse extends DefaulResponsePagination {
  content: Array<ExtensionAlimtalkListItem>
};
export interface ExtensionAlimtalkDownloadExcelParams extends ExtensionRequestParams {
  searchCl: string;
  searchValue: string;
  paymentMethod: string;
  alimCl: string;
  fromDate: string;
  toDate: string;
  sendType: string;
  sendCl: string;
};
export interface ExtensionAlimtalkDownloadExcelResponse {

};
export interface ExtensionAlimtalkDetailParams extends ExtensionRequestParams {
  tid: string;
};
export interface ExtensionAlimtalkDetailResponse {
  receiverName: string;
  merchantName: string;
  sendDate: string;
  mid: string;
  tid: string;
  serviceName: string;
  sendType: string;
  senderName: string;
  paymentMethod: string;
  alimCl: string;
  sendCl: string;
};
export interface IntroListItemProps {
  className?: string;
  serviceName?: string;
  serviceDesc?: string;
  icon?: string;
  path?: string;
};
export interface ArsCardPaymentFinishProps {
  requestSuccess: boolean;
  setRequestSuccess: (requestSuccess: boolean) => void;
};
export interface SmsPaymentDetailResendProps {
  bottomSmsPaymentDetailResendOn: boolean;
  setBottomSmsPaymentDetailResendOn: (bottomSmsPaymentDetailResendOn: boolean) => void;
};
export interface SettlementAgencyBottomAgreeProps {
  bottomAgreeOn: boolean;
  setBottomAgreeOn: (bottomAgreeOn: boolean) => void;
};
/**
 * FilterProps
 */
export interface FilterProps {
  filterOn: boolean;
  setFilterOn: (filterOn: boolean) => void;
};
export interface KeyInPaymentFilterProps extends FilterProps {
  mid: string,
  startDate: string;
  endDate: string;
  transactionStatus: KeyInPaymentTransactionStatus;
  minAmount?: number | string;
  maxAmount?: number | string;
  setMid: (mid: string) => void;
  setStartDate: (startDate: string) => void;
  setEndDate: (endDate: string) => void;
  setTransactionStatus: (transactionStatus: KeyInPaymentTransactionStatus) => void;
  setMinAmount: (minAmount: string | number) => void;
  setMaxAmount: (maxAmount: string | number) => void;
}
// 계좌성명 조회 필터
export interface AccountHolderSearchFilterProps extends FilterProps {
  mid: string;
  searchType: AccountHolderSearchType;
  searchKeyword: string;
  startDate: string;
  endDate: string;
  bank: string;
  processResult: ProcessResult;
  setMid: (mid: string) => void;
  setSearchType: (searchType: AccountHolderSearchType) => void;
  setSearchKeyword: (searchKeyWorld: string) => void;
  setStartDate: (startDate: string) => void;
  setEndDate: (endDate: string) => void;
  setBank: (bank: string) => void;
  setProcessResult: (processResult: ProcessResult) => void;
}

// 링크결제 - 발송내역 탭 필터
export interface LinkPaymentShippingHistoryFilterProps extends FilterProps {
  mid: string;
  searchType: LinkPaymentSearchType;
  searchKeyword: string;
  startDate: string;
  endDate: string;
  transactionStatus: LinkPaymentTransactionStatus;
  processResult: ProcessResult;
  sendMethod: LinkPaymentSendMethod;
  setMid: (mid: string) => void;
  setSearchType: (searchType: LinkPaymentSearchType) => void;
  setSearchKeyword: (searchKeyWorld: string) => void;
  setStartDate: (startDate: string) => void;
  setEndDate: (endDate: string) => void;
  setTransactionStatus: (transactionStatus: LinkPaymentTransactionStatus) => void;
  setProcessResult: (processResult: ProcessResult) => void;
  setSendMethod: (sendMethod: LinkPaymentSendMethod) => void;
}

// 링크결제 - 발송대기 탭 필터
export interface LinkPaymentPendingSendFilterProps extends FilterProps {
  mid: string;
  searchType: LinkPaymentSearchType;
  searchKeyword: string;
  startDate: string;
  endDate: string;
  sendMethod: LinkPaymentSendMethod;
  sendingStatus: LinkPaymentSendingStatus;
  setMid: (mid: string) => void;
  setSearchType: (searchType: LinkPaymentSearchType) => void;
  setSearchKeyword: (searchKeyWorld: string) => void;
  setStartDate: (startDate: string) => void;
  setEndDate: (endDate: string) => void;
  setSendMethod: (sendMethod: LinkPaymentSendMethod) => void;
  setSendingStatus: (sendingStatus: LinkPaymentSendingStatus) => void;
};

export enum DetailInfoSectionKeys {
  Payment = 'Payment',
  Deets = 'Deets'
}
export interface DetailPaymentInfoProps {

};
export interface DetailDeetsInfoProps {

};
export interface DetailResponse {
  paymentInfo?: DetailPaymentInfoProps
  deetsInfo?: DetailDeetsInfoProps
}
export interface DetailInfoSectionProps extends DetailResponse {
  show?: boolean;
  tid?: string;
  onClickToShowInfo?: (info: DetailInfoSectionKeys) => void;
}