import type { User } from 'aws-sdk/clients/appstream'
import type { ListFrontEndInterface } from '../../CommonType'

export interface IndividualListDataTypeInterface
    extends IndividualFormDataInterface {
    key: React.Key
}

export interface IndividualListStateInterface {
    individualList: IndividualListDataTypeInterface[]
    individualListCount: number
    serviceId: number
}

export interface IndividualListInterface {
    individualList: IndividualListDataTypeInterface[]
    individualListCount: number
    selectedCategoryId: number
    selectedServiceId: number
}

export interface Category {
    id: number
    name: string
}

export interface IndividualFormDataInterface {
    individualId: number
    name: string
    tradingName: string
    typeOfSelfEmployment: string
    clientNumber: string
    activestatus: string
    serviceIds: string
    mobilenumber: string
    emailAddress: string
    alternativeEmailAddress: string
    defaultUser: string
    defaultAssigneeUser: string
    businessType: string
    referenceId: number
    companyName: string
    firstName: string
    homeNumber: string
    languageName: string
    memberId: number
    middleName: string
    mobileNumber: string
    preferredName: string
    surName: string
    title: string
    workNumber: string
}

export interface IndividualChatInterface {
    individualid: number
    ReferenceId: number
    Description: string
    userIds: number[]
    BusinessTypeId: number
    IsClientCommunication: number
}

export interface CorporateFormInterface {
    clientDropDownList: ListFrontEndInterface[]
}

export interface IndividualPayloadInteface {
    data: IndividualFormDataInterface[]
    noOfRecords: number
}

export interface IndividualExpandViewInterface {
    IndividualData: IndividualListDataTypeInterface
}

export interface IndividualChatPropsInterface {
    userList: User[]
    individualId: number
}

export interface FormValues {
    index: number
    buttonName: string
}

export interface IndividualChatStateInterface {
    userList: Array<{ label: string }>
}

export interface IndividualChatProps extends IndividualChatStateInterface {
    individualId: number
}

export interface SoleTraderViewProps extends IndividualChatPropsInterface {}

export interface IndividualData {
    businessTradingName: string
    contactName: string
    clientnumber: string
    clientType: string
}

export interface IndividualNewStateInterface {
    categoryDropDownList: ListFrontEndInterface[]
    countryList: ListFrontEndInterface[]
}

export interface IndividualCreateFormDataInterface {
    individualId: number
    clientNumber: string
    title: string
    firstName: string
    middleName: string
    surName: string
    dateOfBirth: string
    typeOfSelfEmployment: string
    tradingName: string
    homeAddressOne: string
    homeAddressTwo: string
    homeTown: string
    homeCountry: string
    homePostCode: string
    mobileNumber: string
    homeNumber: string
    workNumber: string
    emailAddress: string
    alternativeEmailAddress: string
    niNumber: string
    duedate: string
    addressOne: string
    addressTwo: string
    town: string
    country: string
    postCode: string
    dateOfTermSigned: string
    clientCategoryId: number
    individualUTR: string
    isActive: string
    isDelete: string
}

export interface HomeProps {
    categoryDropDownList: ListFrontEndInterface[]
    countryList: ListFrontEndInterface[]
    individualTaps: any
    individualId: number
}

export interface HomeStateProps {
    categoryDropDownList: ListFrontEndInterface[]
    countryList: ListFrontEndInterface[]
    individualTaps: any
}

export interface RegisterAddress {
    countryList: ListFrontEndInterface[]
    isEditing: boolean
    toggleEditing: () => void
    onDateChange: (country: string) => void
    edit: boolean
    toggleCorrBussEditing: () => void
}

export interface BussinessStateProps {
    countryList: ListFrontEndInterface[]
    individualTaps: any
}

export interface initialDetailsInterface {
    categoryDropDownList: ListFrontEndInterface[]
    individualTaps: any
    onCategorySelect: (id: number) => void
}

export interface IndividualHomeFormDataInterface {
    individualId: number
    clientNumber: string
    title: string
    firstName: string
    middleName: string
    surName: string
    typeOfSelfEmployment: string
    tradingName: string
    clientCategoryId: number
    individualUTR: string
    clientCategoryName: string
    clientCategory: number
}

export interface initialState {
    categoryDropDownList: ListFrontEndInterface[]
}

export interface RegisterInterface {
    categoryDropDownList: ListFrontEndInterface[]
    countryList: ListFrontEndInterface[]
    individualTaps: any
}

export interface HomeAddress {
    countryList: ListFrontEndInterface[]
    onDateChange: (country: string) => void
}

export interface PersonalDetails {
    individualTaps: any
    onDateChange: (dateString: string) => void
    onDueDateChange: (dateString: string) => void
}

export interface BussinessAddress {
    countryList: ListFrontEndInterface[]
    individualTaps: any
    isEditing: boolean
    toggleEditing: () => void
    onDateChange: (country: string) => void
    onDueDateChange: (dateString: string) => void
}

export interface ServiceCorporateTaps {
    status: string
    annualAccountId: number
    companyType: number
    referenceId: number
    fromDate: string
    deadlineDate: string
    toDate: string
}
export interface CorporateServicesView {
    individualTaps: ServiceData[]
    individualId: number
}
export interface AnnualAccountData {
    annualAccountId: number
    companyType: number
    referenceId: number
    fromDate: string
    toDate: string
    deadlineDate: string
    status: string
}

export interface AnnualEditData {
    editData: AnnualAccountData
    individualId: number
    handleChildFormSave: () => void
}
export interface CtStateInterface {
    countryList: ListFrontEndInterface[]
}

export interface ServiceStateInterface {
    individualTaps: ServiceData[]
}
export interface TogilleAddress {
    addressLineOne: string
    addressLineTwo: string
    town: string
    country: string
    postCode: string
}
export interface CorporateCreateTaskInterface {
    serviceDropDownList: ListFrontEndInterface[]
    userList: ListFrontEndInterface[]
    priorityDropDownList: ListFrontEndInterface[]
    onClose: () => void
}

export interface CorporateCreateTaskStateInterface {
    serviceDropDownList: ListFrontEndInterface[]
    userList: ListFrontEndInterface[]
    priorityDropDownList: ListFrontEndInterface[]
}

export interface CreateTaskInterface {
    TaskId: number
    TaskName: string
    PriorityId: number
    SortOrder: number
    TaskType: number
    ClientName: string
    BusinessType: number
    ReferenceId: number
    ServiceId: number
    ServiceReferenceId: number
    AssignedBy: number
    AssignedTo: number
    FromDate: string
    ToDate: string
    StatusId: number
    NotifyToStatusChange: number
    Description: string
    RecurringFrequency: number
    RecurringFrequencyType: number
    RecurringFrequencyPeriodId: number
    RecurringEnds: number
    RecurringOccurrence: number
    RecurringEndsOn: string
    IsRepeatOnSun: number
    IsRepeatOnMon: number
    IsRepeatOnTue: number
    IsRepeatOnWed: number
    IsRepeatOnThu: number
    IsRepeatOnFri: number
    IsRepeatOnSat: number
}

export interface CorporateConfigurationInviteClientInterface {
    paymentOptionDropDownList: ListFrontEndInterface[]
    cancelGoCardlessModal: CallableFunction
}

export interface DirectDebitCustomerInterface {
    CustomerId: number
    ApplicationId: number
    ReferenceId: number
    ClientCategoryId: number
    BusinessTypeId: number
    CompanyName: string
    GivenName: string
    FamilyName: string
    Email: string
    AddressLine1: string
    AddressLine2: string
    AddressLine3: string
    City: string
    PostalCode: string
    CountryCode: string
    Region: string
    Language: string
    PhoneNumber: string
    DanishIdentityNumber: string
    SwedishIdentityNumber: string
    Description: string
    RegisterToken: string
    PaymentOptionId: number
}

export interface CorporateConfigurationInterface {
    registeredClientIndividualConfiguration: any
}
export interface ClientCompanyActiveService {
    clientCompanyActiveServiceId: number
    companyType: number
    referenceId: number
    serviceId: number
    status: string
    serviceAmount: number
    serviceAmountTotal: number
    subscriptionType: number
    displayType: number
    includeVat: number
    vatAmount: number
    otherServiceDescription: string
}

export interface ClientCompanyControlData {
    clientControlId: number
    clientCompanyControlId: number
    value: string
    companyType: number
    referenceId: number
}
export interface ClientCompanyVerification {
    clientCompanyVerificationId: number
    clientVerificationId: number
    companyType: number
    referenceId: number
    status: string
}

export interface ClientControlData {
    clientControlId: number
    clientCompanyControlId: number
    keyName: string
    keyDataType: string
    description: string
    value: string
}

export interface ClientVerificationData {
    clientCompanyVerificationId: number
    clientVerificationId: number
    CompanyType: number
    clientVerificationName: string
    status: string
    referenceId: number
}

export interface ComplainceDefaultinterface {
    clientCompanyServiceViewList: ServiceData[]
    clientCompanyVerificationViewList: ClientVerificationData[]
    clientControlViewList: ClientControlData[]
}

export interface Complainceprop {
    individualTaps: ComplainceDefaultinterface
    individualId: number
    onbordingId: number
}

export interface ComplaincepropView {
    individualTaps: ComplainceDefaultinterface
}

export interface GenerateEmails {
    clientEmailId: number
    templateId: number
    serviceProcessId: number
    companyTypeId: number
    referenceId: number
    serviceActionId: number
    serviceActionStepId: number
    fromAddress: string
    toAddress: string
    ccAddress: string
    bccAddress: string
    subject: string
    description: string
    IykonsBCCAddress: string
}
export interface ServiceData {
    serviceId: number
    serviceReferenceId: number
    serviceName: string
    status: string
    serviceAmount: number
    serviceAmountTotal: number
    subscriptionType: number
    displayType: number
    includeVat: number
    vatAmount: number
    subscriptionTypeTotal: number
}
export interface BusinessTagFormDataInterface {
    IndividualId: number
    ReferenceId: number
    CompanyType: number
    Status: number
}
export interface BusineeTagPayloadInteface {
    data: IndividualFormDataInterface[]
    noOfRecords: number
}
export interface InduvidualDetailsStateListInterface {
    indiviualbusinessTagList: IndividualListDataTypeInterface[]
    indiviualbusinessTagListCount: number
    individualTaps: IndividualListDataTypeInterface[]
}
export interface IndividualDetailsListformInterface {
    indiviualbusinessTagList: IndividualListDataTypeInterface[]
    individualId: number
    indiviualbusinessTagListCount: number
    individualTaps: IndividualListDataTypeInterface[]
}
export interface PartnershipDocumentSave {
    companyAttachmentId: number
    companyTypeId: number
    referenceId: number
    referenceId2: number
    documentBaseId: number
    documentBaseName: string
    attachmentPath: string
    individualId: number
    type: string
    ppExpiryDate: string
    dlExpiryDate: string
    prExpiryDate: string
}

export interface PartnerDocumentList {
    companyAttachmentId: number
    title: string
    description: string
    documentBaseId: number
    documentType: number
    documentBaseIcon: string
    attachmentPath: string
    lastUpdateDate: string
    lastUpdateUser: string
    ppExpiryDate: string
    dlExpiryDate: string
    prExpiryDate: string
}

export interface CompanyAttachment {
    companyAttachmentId: number
    title: string
    description: string
    generalOrOfficerType: string
    documentBaseId: number
    documentBaseIcon: string
    attachmentPath: string
    lastUpdateDate: string
    lastUpdateUser: string
    documentType: number
}

export interface PartnershipDocumentView {
    individualTaps: PartnershipDocuentData
    documenttypeList: ListFrontEndInterface[]
}

export interface PartnershipDocuentData {
    generalDocumentList: CompanyAttachment[]
    officerDocumentHeaderList: OfficerData[]
    serviceDocumentList: ServiceDocument[]
}

export interface OfficerData {
    officerPersonOrCorporateType: string
    officerPersonOrCorporateId: number
    documentOwner: string
    documentType: number
    officerDocumentList: PartnerDocumentList[]
}

export interface ServiceDocument {
    companyAttachmentId: number
    title: string
    description: string
    serviceName: string
    documentBaseId: number
    documentBaseIcon: string
    attachmentPath: string
    lastUpdateDate: string
    lastUpdateUser: string
    documentType: number
    serviceCurrentStatus: string
}

export interface PartnershipDoucmentOfficerExpandView {
    expandData: PartnerDocumentList[]
}
