import { ReactNode } from 'react';

interface User {
    wallet_address: string;
    first_name?: string;
    last_name?: string;
    entity_name?: string;
    account_type: 'human' | 'entity';
    email?: string;
    role: string;
    created_at: string;
}
interface NewUserData {
    wallet_address: string;
    first_name?: string;
    last_name?: string;
    entity_name?: string;
    account_type?: 'human' | 'entity';
    email?: string;
    role?: string;
}
interface UserDetails {
    first_name: string;
    last_name: string;
    entity_name: string;
    email: string;
    role: string;
}
interface CapAuthConfig {
    appName: string;
    appDescription: string;
    theme?: {
        primary: string;
        secondary: string;
    };
    logo?: {
        src: string;
        width: number;
        height: number;
    };
    customStyles?: {
        container?: string;
        card?: string;
        button?: string;
        input?: string;
        select?: string;
    };
    redirectPath?: string;
    refreshPageOnAuth?: boolean;
    modalMode?: boolean;
    timeouts?: {
        authentication?: number;
        polling?: number;
    };
    encryptionKey?: string;
    enableMobileWallet?: boolean;
    mobileWalletScheme?: string;
    debug?: boolean;
}
interface AuthHandlerConfig {
    customValidation?: (walletAddress: string) => Promise<boolean>;
    validateUser?: (walletAddress: string) => Promise<User | null>;
    onNewUser?: (user: NewUserData) => Promise<void>;
    dbPath?: string;
}
interface CapAuthProps {
    onAuthenticated: (user: User) => void;
    config: CapAuthConfig;
    onError?: (error: Error) => void;
}
interface AuthProviderProps {
    children: ReactNode;
    config?: Partial<CapAuthConfig>;
    onAuthSuccess?: (user: User) => void;
    onAuthError?: (error: Error) => void;
}
interface AuthResponse {
    authenticated: boolean;
    userAddress?: string;
    user?: User;
    error?: string;
}

export type { AuthResponse as A, CapAuthConfig as C, NewUserData as N, User as U, UserDetails as a, AuthProviderProps as b, CapAuthProps as c, AuthHandlerConfig as d };
