export {};
declare global {
    interface ContactDetails {
        source?: string;
        contact_group?: string;
        industry?: string;
        address?: string;
        city?: string;
        state?: string;
        country?: string;
        zip_code?: string;
        company?: string;
        designation?: string;
        website?: string;
        tax_id?: string;
        company_size?: string;
        founded_year?: string;
        department?: string;
        linkedin?: string;
        birthday?: string;
        notes?: string;
    }

    interface Contact {
        id: number;
        uid: string;
        name: string;
        email: string;
        phone: string;
        type: number;
        type_label?: string;
        category: number;
        status: number;
        avatar?: string;
        created_at?: string;
        details?: ContactDetails;
        company_details?: {
            logo?: string;
            website?: string;
            industry?: string;
            company_size?: string;
        };
        individual_details?: {
            profile_photo?: string;
            occupation?: string;
        };
        manager?: {
            id: number;
            uid: string;
            name: string;
            email: string;
            avatar?: string;
        };
        assigned_users?: Array<{
            id: number;
            uid: string;
            name: string;
            email: string;
            avatar?: string;
            type?: string;
            role?: string;
        }>;
    }

    interface ContactOption {
        id: number;
        name: string;
    }

    interface ContactDetailsPageProps {
        contact?: Contact;
        availableContacts?: ContactOption[];
        pageTitle?: string;
        contactType?: string;
        contactAbleType?: string;
    }

    interface ActivityState {
        data: any[];
        nextCursor: string | null;
        hasMore: boolean;
        isLoading: boolean;
    }

    interface ContactOption {
        id: number;
        name: string;
        type?: number; // 1 = Individual, 2 = Company
    }

    interface ContactRelation {
        id?: number;
        company_id: number | string;
        contact_id: number | string;
        level: 'primary' | 'additional';
        type: 'company_parent' | 'individual_parent';
    }

    interface UserType {
        id: number;
        uid: string;
        name: string;
        email: string;
        avatar?: string;
        role?: string;
    }

    interface AddressInfo {
        street?: string;
        city?: string;
        state?: string;
        zip?: string;
        country?: string;
    }

    interface ContactDetails {
        billing_address?: AddressInfo;
        shipping_address?: AddressInfo;
        tags?: string[];
        country?: string;
        branch?: string;
        level?: 'General' | 'VIP' | 'Special';
        life_cycle_stage?: 'Lead' | 'Prospect' | 'Customer' | 'Recurring_Customer';
        contact_group?: 'Retail' | 'Wholesale' | 'Garments' | 'Supplier';
        additional_country_code?: string;
        additional_phone?: string;
        additional_email?: string;
        currency?: string;
        language?: string;
    }

    interface CompanyContactDetails {
        logo?: string;
        website?: string;
        industry?: string;
        company_size?: string;
        yearly_revenue?: string;
        vat?: string;
        tax_no?: string;
        company_legal_name?: string;
        time_zone?: string;
        description?: string;
        linkedin?: string;
    }

    interface IndividualContactDetails {
        profile_photo?: string;
        dob?: string;
        nid?: string;
        passport?: string;
        education?: string;
        occupation?: string;
        company?: string;
        business_name?: string;
        gender?: 'Male' | 'Female' | 'Other';
        preferred_contact_time?: string;
        preferred_contact_channels?: string;
        nid_documents?: string[];
        passport_documents?: string[];
    }

    interface Contact {
        id: number;
        uid: string;
        name: string;
        contact_code?: string;
        primary_email: string;
        is_login?: boolean;
        primary_phone?: string;
        category: number;
        type: number;
        status: number;
        app_name?: string;
        source?: string;
        last_contacted_at?: string;
        created_at?: string;
        details?: ContactDetails;
        company_details?: CompanyContactDetails;
        individual_details?: IndividualContactDetails;
        assigned_users?: UserType[];
        manager?: UserType | null;
        relations?: ContactRelation[];
    }

    interface CountryData {
        name: string;
        flag: string;
    }

    interface SelectOption {
        label: string;
        value: string;
    }

    interface EditContactPageProps {
        contact: Contact;
        companyContacts?: ContactOption[];
        individualContacts?: ContactOption[];
        availableUsers?: UserType[];
        countries?: Record<string, CountryData>;
        currencies?: SelectOption[];
        languages?: SelectOption[];
        returnUrl?: string;
        [key: string]: any;
    }

    interface ContactRelationsSectionProps {
        companyOptions: Array<{ label: string; value: string }>;
        individualOptions: Array<{ label: string; value: string }>;
        existingRelations?: ContactRelation[];
    }

    interface ContactDetails {
        source?: string;
        contact_group?: string;
        industry?: string;
        address?: string;
        city?: string;
        state?: string;
        country?: string;
        zip_code?: string;
        company?: string;
        designation?: string;
        website?: string;
        manager_id?: number;
        tax_id?: string;
        company_size?: string;
        founded_year?: string;
        department?: string;
        linkedin?: string;
        birthday?: string;
        notes?: string;
    }

    interface Contact {
        id: number;
        uid: string;
        name: string;
        email: string;
        phone: string;
        type: number;
        type_label?: string;
        category: number;
        status: number;
        avatar?: string;
        created_at?: string;
        details?: ContactDetails;
        company_details?: {
            logo?: string;
            website?: string;
            industry?: string;
            company_size?: string;
        };
        individual_details?: {
            profile_photo?: string;
            occupation?: string;
        };
        manager?: {
            id: number;
            uid: string;
            name: string;
            email: string;
            avatar?: string;
        };
        assigned_users?: Array<{
            id: number;
            uid: string;
            name: string;
            email: string;
            avatar?: string;
            type?: string;
            role?: string;
        }>;
    }

    interface ContactOption {
        id: number;
        name: string;
    }

    type ShowProps = {
        contact: Contact;
        availableContacts: ContactOption[];
    };
    interface ContactItem {
        id: number;
        uid: string;
        name: string;
        email: string;
        phone: string | null;
        status: number;
        user_id: number | null;
        avatar?: string | null;
        created_at: string | null;
        primary_email?: string | undefined | null;
    }
    interface ContactSummaryItem {
        title: string;
        value: number;
    }
    interface ContactActivityTabsProps {
        activityTimeline: TimelineGroup[];
        notesTimeline: TimelineGroup[];
        tasksTimeline: TimelineGroup[];
        emailsTimeline: TimelineGroup[];
        callsTimeline: TimelineGroup[];
        meetingsTimeline: TimelineGroup[];
        remindersTimeline: TimelineGroup[];
        isLoadingActivities?: boolean;
        hasMoreActivities?: boolean;
        isLoadingMoreActivities?: boolean;
        onLoadMore?: () => void;
        sortOrder?: 'desc' | 'asc';
        onSortChange?: (order: 'desc' | 'asc') => void;
        activeSubTab?: string;
        onTabChange?: (tab: string) => void;
        sentinelRef?: RefObject<HTMLDivElement>;
        refetchData: () => void;
    }

    interface TabContentProps {
        config: TabConfig;
        timeline: TimelineGroup[];
        isLoadingActivities: boolean;
        hasMoreActivities: boolean;
        isLoadingMoreActivities: boolean;
        onLoadMore?: () => void;
        sentinelRef?: RefObject<HTMLDivElement>;
        refetchData: () => void;
        showAddButton?: boolean;
    }
    interface TabConfig {
        value: string;
        label: string;
        icon: LucideIcon;
        emptyIcon: LucideIcon;
        emptyMessage: string;
        loadMoreText: string;
    }

    interface ContactDetails {
        source?: string;
        contact_group?: string;
        industry?: string;
        address?: string;
        city?: string;
        state?: string;
        country?: string;
        zip_code?: string;
        company?: string;
        designation?: string;
        website?: string;
        tax_id?: string;
        company_size?: string;
        founded_year?: string;
        department?: string;
        linkedin?: string;
        birthday?: string;
        notes?: string;
        type?: any;
    }

    interface ContactSidebarContact {
        id: number;
        uid: string;
        name: string;
        email: string;
        phone: string;
        type: number;
        type_label?: string;
        category: number;
        status: number;
        avatar?: string;
        details?: ContactDetails;
        company_details?: {
            logo?: string;
            website?: string;
            industry?: string;
            company_size?: string;
        };
        individual_details?: {
            profile_photo?: string;
            occupation?: string;
        };
        manager?: {
            id: number;
            uid: string;
            name: string;
            email: string;
            avatar?: string;
        };
        assigned_users?: Array<{
            id: number;
            uid: string;
            name: string;
            email: string;
            avatar?: string;
            type?: string;
            role?: string;
        }>;
        created_at?: string;
        primary_phone?: any;
        primary_email?: any;
        category_label?: string;
        last_contacted_at?: string;
        address?: string;
        additional_phone?: string;
        additional_email?: string;
        preferable_contact_time?: string;
        Preferable_contact_channel?: string;
        birthdate?: string;
        verification_type?: string;
        verification_number?: string;
        last_education?: string;
        language?: string;
        currency?: string;
        verification_documents?: string;
    }

    interface ContactOption {
        id: number;
        name: string;
    }

    interface ContactSidebarProps {
        contact: ContactSidebarContact;
        availableContacts?: ContactOption[];
        contactAbleType?: string;
        refetchData?: () => void;
    }
}
