export * from './Auth'
export * from './GroupMetadata'
export * from './Chat'
export * from './Contact'
export * from './State'
export * from './MexUpdates'
export * from './Message'
export * from './Newsletter'
export * from './Socket'
export * from './Events'
export * from './Product'
export * from './Call'
export * from './Signal'

import { AuthenticationState } from './Auth'
import { SocketConfig } from './Socket'

export type UserFacingSocketConfig = Partial<SocketConfig> & {
    auth: AuthenticationState
}

export type BrowsersMap = {
    ubuntu(browser: string): [string, string, string]
    macOS(browser: string): [string, string, string]
    windows(browser: string): [string, string, string]
    linux(browser: string): [string, string, string]
    android(browser: string): [string, string, string]
    iOS(browser: string): [string, string, string]
    baileys(browser: string): [string, string, string]
    kaiOS(browser: string): [string, string, string]
    chromeOS(browser: string): [string, string, string]
    appropriate(browser: string): [string, string, string]
    custom(platform: string, browser: string, version: string): [string, string, string]
}

export declare const enum DisconnectReason {
    connectionClosed = 428,
    connectionLost = 408,
    connectionReplaced = 440,
    timedOut = 408,
    loggedOut = 401,
    badSession = 500,
    restartRequired = 515,
    multideviceMismatch = 411,
    forbidden = 403,
    unavailableService = 503
}

export type WAInitResponse = {
    ref: string
    ttl: number
    status: 200
}

export type WABusinessHoursConfig = {
    day_of_week: string
    mode: string
    open_time?: number
    close_time?: number
}

export type WABusinessProfile = {
    description: string
    email: string | undefined
    business_hours: {
        timezone?: string
        config?: WABusinessHoursConfig[]
        business_config?: WABusinessHoursConfig[]
    }
    website: string[]
    category?: string
    wid?: string
    address?: string
}

export type CurveKeyPair = {
    private: Uint8Array
    public: Uint8Array
}