// --- AUTO-GENERATED TOOL TYPES START ---
// --- ai ---
  interface AiTool {
    tokenCount: (data: any) => number
    smartSanitize: (text: string) => string
    toon: (data: any) => string
    toonToJson: (toon: string) => any
    chunker: (text: string, options?: { size?: number, overlap?: number }) => string[]
    similarity: (a: number[], b: number[]) => number
    extractReasoning: (text: string) => { reasoning: string, content: string }
    prompt: (template: string, vars: Record<string, any>) => string
    schema: (data: any) => string
    snapshot: () => string
  }

// --- anchor ---
  interface AnchorTool {
    /**
     * Converts anchor tags to onClick events
     * @param selector - CSS selector for target elements
     */
    toOnClick(selector: string): void
  }

// --- array ---
  interface ArrayTool {
    find<T>(array: T[], key: any): T | any
    unique<T>(array: T[]): T[]
    delete<T>(array: T[], key: keyof T): void
    merge<T>(arrayA: T[], arrayB: T[]): T[]
    mergeByKey<T extends Record<string, any>>(arrayA: T[], arrayB: T[], key: keyof T): T[]
    asc<T>(array: T[]): T[]
    desc<T>(array: T[]): T[]
    duplicates<T>(array: T[]): T[]
    even<T>(array: T[]): T[]
    odd<T>(array: T[]): T[]
    toObj<T>(array: T[]): Record<string, T>
    sumColumn(array: number[][], column: number): number
    shuffle<T>(array: T[]): T[]
    generate(num: number): number[]
    testArrayInt(array: unknown[]): number[]
    rand32(number: number): number
    findindex<T>(array: T[], key: any): number
    pathToJson(array: string[], separator?: string): Record<string, unknown>
    deepClone<T>(src: T): T
    match(arrayWords: string[], arrayToCheck: string[]): boolean
  }

// --- audio ---
  interface AudioTool {
    /**
     * Plays an audio file if it is not already playing.
     * If no file is specified, removes all audio elements from the document.
     *
     * @param file - The name of the audio file to play.
     * @param path - The path to the audio file.
     * @param loop - Whether the audio should loop.
     */
    play: (file?: string, path?: string, loop?: boolean) => void
  }

// --- avoid ---
  interface AvoidTool {
    cache: (uri: string) => string
  }

// --- biometric ---
  interface BiometricTool {
    isAvailable: () => boolean
    getWebAuthnSupport: () => {
      supported: boolean
      platformAuthenticator: boolean
      hybridTransport: boolean
      uvToken: boolean
    }
    isSensorAvailable: (type: "fingerprint" | "face" | "iris") => Promise<boolean>
    register: (userId: string, rpId?: string, rpName?: string, userName?: string) => Promise<{ success: boolean; credentialId?: string; error?: string }>
    authenticate: (userId: string, rpId?: string, credentialId?: string) => Promise<{ success: boolean; error?: string }>
    getCredential: (credentialId: string) => PublicKeyCredentialDescriptor | undefined
    deleteCredential: (credentialId: string) => boolean
    listCredentials: () => string[]
  }

// --- browser ---
  interface BrowserTool {
    state(state: any, title: any, url: any): void
    forw(times: number): void
    back(times: number): void
    reload(): void
    href(url: string): void
    offLine(text?: string): void
    zoom(): number
    status(code: number): string
    interlock(onUpdate: (tabs: number) => void): void
  }

// --- check ---
  interface CheckTool {
    url: (url: string) => any
    version: (v1: string, v2: string, opts?: any) => any
    npmVer: (npm: string) => any
  }

// --- color ---
  interface ColorTool {
    hex: (c: any) => string
    toHex: (rgb: any) => string
    toRGB: (c: any) => number[]
    oleColor: (c: any) => string
    gradient: (colorStart: any, colorEnd: any, colorCount: any) => any
  }

// --- compress ---
  interface CompressTool {
    gzip: (data: string | Uint8Array) => Promise<Blob>
    gunzip: (blob: Blob) => Promise<string>
    deflate: (data: string | Uint8Array) => Promise<Blob>
    inflate: (blob: Blob) => Promise<string>
    compress: (data: string) => string
    decompress: (data: string) => string
    base64Encode: (data: string) => string
    base64Decode: (data: string) => string
    urlEncode: (data: string) => string
    urlDecode: (data: string) => string
    htmlEncode: (data: string) => string
    htmlDecode: (data: string) => string
  }

// --- cookie ---
  interface CookieTool {
    set: (pars: {
      name: any,
      value: any,
      time?: any,
      path?: string,
      sameSite?: string,
      secure?: string
    }) => any
    get: (name: string) => any
    delete: (name: string) => any
    removeAll: () => any
  }

// --- coords ---
  interface CoordsTool {
    degreesToRadians: (degrees: any) => any
    latToMeters: (points: any) => any
    toVector: (points: any) => any
    convertToDecDegrees: (deg: any, minutes: any, sec: any, direction: any) => any
    distance: (point1: any, point2: any) => any
    polarToCartesian: (centerX: any, centerY: any, radius: any, angleInDegrees: any) => any
    mapDegreesToPixels: (degree: number, minDegree: number, maxDegree: number, minPixel: number, maxPixel: number, padding: number) => number
  }

// --- credits ---
  interface Credits {
    name: string
    version: string
    description: string
    license: string
    author: {
      name: string
      email: string
    }
  }
  
  type CreditsTool = (props: Credits) => void

// --- date ---
  interface DateTool {
    days: (lang?: string) => string[]
    months: (lang?: string) => string[]
    year: () => number
    toIso: (value: any, int?: string) => string | null
    toMMDDYYYY: (value: any) => string
    toYYYYMMDD: (value: any) => string | undefined
    toHuman: (value: any) => string
    convert: (value: any, format: string[]) => string | null
    iso2Epoch: (value: any) => number
    localIsoTime: (value: any) => string
    utc: () => string
    parse: (value: any, separator?: string) => string | null
    addDays: (date: any, days: number) => Date
    dateTimeToString: (dateObject: any) => string
    isoToHuman: (value: any, symbol?: string) => string | null
    fullDate: () => string
    epoch: () => number
    diffInDays: (d1: any, d2: any) => number
    diffInWeeks: (d1: any, d2: any) => number
    diffInMonths: (d1: any, d2: any) => number
    diffInYears: (d1: any, d2: any) => number
    dateToYMD: (date: any) => string
    collection: (params: { date?: Date; type: string; locale?: string }) => string | undefined
    timeZones: () => string[]
  }

// --- disable ---
  interface DisableTool {
    select: (el?: string) => void
    spellCheck: (tmr?: number) => void
    rightClick: (el?: string) => void
    copy: (el?: string) => void
    paste: (el?: string) => void
    cut: (el?: string) => void
    drag: (el?: string) => void
  }

// --- dispatch ---
  interface DispatchTool {
    set: (name: string, value?: any) => void
    listen: (name: string, cb?: (e: Event) => void, flag?: boolean) => void
    remove: (name: string) => void
  }

// --- elements ---
  interface ElementsTool {
    fitScale: (el: any, scale?: number, fit?: boolean) => void
    scaleBasedOnWindow: (elm: any, scale: number, fit: boolean) => void
  }

// --- events ---
  interface EventsTool {
    list: (el: Element) => any
    multi: (element: Element, eventNames: string, listener: EventListener) => void
    copy: (el: string) => void
    onDrag: (elem: string) => void
    keys: (e: KeyboardEvent) => { key: string; ctrl: boolean; alt: boolean; shift: boolean }
  }

// --- fetch ---
  interface FetchTool {
    /**
     * Perform a resilient fetch with automatic retries and exponential backoff.
     */
    (url: string, options?: any, retries?: number, backoff?: number): Promise<Response>
  
    /**
     * Perform a GET request.
     */
    get: (url: string, options?: any) => Promise<Response>
  
    /**
     * Perform a POST request with optional JSON body auto-serialization.
     */
    post: (url: string, body: any, options?: any) => Promise<Response>
  }

// --- form ---
  interface FormTool {
    serialize: (form: HTMLFormElement) => { [key: string]: any }
    confirmType: (type: string, value: any) => boolean
    required: (value: any) => string | undefined
    minLength: (value: any, num?: number) => string | undefined
    maxLength: (value: any, num?: number) => string | undefined
    maxPhoneNumber: (value: any, num?: number) => string | undefined
    isNumeric: (value: any) => boolean
    isEmail: (value: any) => boolean
    pattern: (e: Event) => void
    noSpecialChars: (e: Event) => void
    table: (size: [number, number], id: string, elem: HTMLElement) => void
    sanitize: (str: string) => string | undefined
  }

// --- format ---
  interface FormatTool {
    currency: (value: number, locale?: string, currency?: string) => string
    phoneNumber: (value: string, countryCode?: string) => string
  }

// --- i18n ---
  interface I18nTool {
    setLocale: (locale: string) => void
    getLocale: () => string
    addTranslations: (locale: string, strings: Record<string, string>) => void
    t: (key: string, vars?: Record<string, any>) => string
    pluralize: (count: number, options: { zero?: string; one?: string; two?: string; few?: string; many?: string; other?: string }, locale?: string) => string
    number: (value: number, locale?: string, options?: Intl.NumberFormatOptions) => string
    date: (value: Date | number, locale?: string, options?: Intl.DateTimeFormatOptions) => string
    relativeTime: (timestamp: number | Date, locale?: string) => string
    list: (items: string[], locale?: string, options?: Intl.ListFormatOptions) => string
    getSupportedLocales: () => string[]
  }

// --- image ---
  interface ImageTool {
    resize: (img: HTMLImageElement, width: number, height: number, quality?: "pixelated" | "auto") => string
    crop: (img: HTMLImageElement, region: { x: number; y: number; width: number; height: number }) => string
    toDataURL: (img: HTMLImageElement | HTMLCanvasElement, format?: string, quality?: number) => string
    fromDataURL: (dataURL: string) => Promise<HTMLImageElement>
    filter: (img: HTMLImageElement, options: { brightness?: number; contrast?: number; saturate?: number; hueRotate?: number; invert?: number; sepia?: number; blur?: number; grayscale?: number }) => string
    rotate: (img: HTMLImageElement, degrees: number) => string
    flip: (img: HTMLImageElement, direction: "horizontal" | "vertical") => string
    grayscale: (img: HTMLImageElement) => string
    blur: (img: HTMLImageElement, radius: number) => string
    getDimensions: (img: HTMLImageElement | HTMLCanvasElement) => { width: number; height: number }
    load: (src: string) => Promise<HTMLImageElement>
    composite: (img1: HTMLImageElement, img2: HTMLImageElement, mode?: "source-over" | "multiply" | "screen" | "overlay" | "darken" | "lighten", x?: number, y?: number) => string
  }

// --- json ---
  interface JsonTool {
    counter: (json: any, key?: string, val?: any) => number | null
    toCsv: (jsonInput: any) => string
    saveCsvAs: (csvData: string, fileName: string) => void
    is: (str: string) => boolean
    parse: (file: string) => any
    sanitize: (str: string) => string
    sanitizeJsonValue: (str: string) => string
  }

// --- load ---
  interface LoadTool {
    all: (context: any, cacheName?: string) => void
    file: (filePath: string) => Promise<string>
    fileToElement: (elementSelector: string, filePath: string) => Promise<void>
    json: (filePath: string) => Promise<any>
    remote: (path: string, method?: string, headers?: HeadersInit) => Promise<any>
    script: (scripts: string[], elementSelector?: string) => void
    toJson: (context: any, cacheName?: string) => void
  }

// --- logging ---
  interface LoggingTool {
    list: {
      type: string
      message: string
    }[]
    reg: (txt: string) => void
    debug: (txt: string) => void
    error: (txt: string) => void
  }

// --- math ---
  interface MathTool {
    rnd: () => number
    tmr: () => number
    add: (a: number, b: number) => number
    sub: (a: number, b: number) => number
    multi: (a: number, b: number) => number
    div: (a: number, b: number) => number
    rem: (a: number, b: number) => number
    exp: (a: number, b: number) => number
    isOdd: (a: number) => boolean
    float2int: (a: number) => number
    percent: (n: number, tot: number) => number
    isPrime: (n: number) => boolean
  }

// --- memory ---
  interface MemoryTool {
    lock: (obj: string) => void
    unlock: (obj: string) => void
  }

// --- navigation ---
  interface NavigationTool {
    load(url: string): Promise<void>
    ajax(): void
    ajax_running?: boolean
  }

// --- net ---
  interface NetTool {
    /**
     * Smart Fetch with automatic retry and exponential backoff.
     * @param url The URL to fetch.
     * @param options Fetch options (method, headers, body, etc.)
     * @param retries Number of retry attempts (default: 3)
     * @param backoff Initial backoff delay in ms (default: 1000)
     * @returns Promise resolving to the Response
     */
    smartFetch(url: string, options?: RequestInit, retries?: number, backoff?: number): Promise<Response>
  }

// --- objects ---
  interface ObjectsTool {
    toArray: (object: Record<string, any>) => [string, any][]
    replaceNullObjects: (data: Record<string, any>) => Record<string, any>
    serialize: (value: any) => any
    deSerialize: (valueNew: any) => any
    sort: (o: Record<string, any>) => Record<string, any>
    toXML: (obj: Record<string, any>) => string
    find: (array: any[], key: string, value: any) => any
    instance: (obj: any) => any
    updateByKey: (obj: Record<string, any>, key: string, newValue: any) => Record<string, any>
    findindex: (array: any[], key: string) => number
    parse: (val: any) => any
    isObject: (val: any) => boolean
    diff: (obj1: Record<string, any>, obj2: Record<string, any>) => Record<string, { obj1: any, obj2: any }>
    path: (prop: string, array: string[], separator?: string) => string
  }

// --- path ---
  interface PathTool {
    rail: () => string[]
    hash: () => string[]
    query: (url: string) => Record<string, string>
  }

// --- promise ---
  interface PromiseTool {
    check: (p: any) => boolean
    resolve: (data: any) => Promise<any>
  }

// --- sanitize ---
  interface SanitizeTool {
    html: (s: string) => string
  }

// --- screen ---
  interface ScreenTool {
    fullScreen: (el: string) => void
    toggle: (el: string) => void
    info: () => {
      width: number
      height: number
      availWidth: number
      availHeight: number
      colorDepth: number
      pixelDepth: number
    }
  }

// --- scrollbar ---
  interface ScrollbarTool {
    custom: (el: string, options: any) => void
    indicator: (props: any) => void
    position: {
      get: (el: any) => void
      set: (el: any) => void
    }
    smooth: (target: any, speed: any, smooth: any) => void
    scrollTo: (container: string, element: string, gap?: number) => void
  }

// --- security ---
  interface SecurityTool {
    uuid: {
      byVal: (string: string) => string
      v4: string
      v5: string
    }
    hashPass: (u: string, p: string, t?: string) => Promise<string>
    crypt: (u: string, p: string, mode?: string) => string
    deCrypt: (u: string, p: string, mode?: string) => string
    AES_KeyGen: (passKey?: string) => string
    SHA256_Hex: (passKey: string) => string
    ulid: () => string
    fingerprint: () => string
    saveEncrypted: (key: string, value: string, secret: string) => void
    getEncrypted: (key: string, secret: string) => string | null
  }

// --- shortcut ---
  interface ShortcutTool {
    keys: (e: any, trigger: any) => void
  }

// --- socket ---
  interface SocketTool {
    info: () => string
    start: (server: any, name: string) => void
    conn: (id: any, server: any, name: string) => void
    connect: (server: any, name: string) => void
    open: (id: any, server: any, name: string) => void
    ping: (name: string) => void
    send: (mex: any, name: string) => void
    receive: (func: Function, name: string) => void
    keepAlive: (name: string) => void
    check: () => void
    list: () => WebSocket[]
    close: (name: string) => void
  }

// --- sse ---
  interface SseTool {
    /**
     * Opens an SSE connection with support for custom fetch options (POST, Headers, etc).
     */
    open(url: string, options?: any): {
      on(event: "message" | "error" | "open", cb: (data: any) => void): void
      close(): void
    }
  }

// --- svg ---
  interface SvgTool {
    init: (container: HTMLElement, source1: [HTMLElement, string], source2: [HTMLElement, string], cb?: Function) => void
    check: () => boolean
    update: (rect1: HTMLElement, rect2: HTMLElement, cxn: HTMLElement) => void
    getCurve: (p1: [number, number], p2: [number, number], dx: number) => string
    getIntersection: (dx: number, dy: number, cx: number, cy: number, w: number, h: number) => [number, number]
    setConnector: (source: HTMLElement, side: string) => HTMLElement
    removeConnection: (container: HTMLElement) => void
    makeScrollable: (svgContainer: HTMLElement, scrollContainer: HTMLElement, elm1: HTMLElement, elm2: HTMLElement, rect1: HTMLElement, rect2: HTMLElement) => void
    makeDraggable: (evt: Event) => void
    toggle: (evt: Event, container: HTMLElement, source1: HTMLElement, source2: HTMLElement) => void
    convert: (options: any) => string | void
  }

// --- sync ---
  interface SyncTool {
    /**
     * Synchronize data between tabs using BroadcastChannel.
     */
    tab: (channelName: string, callback: (data: any) => void) => { post: (data: any) => void, close: () => void }
    /**
     * Create a Proxy object linked to localStorage for auto-sync with optional encryption.
     */
    storageProxy: <T extends object>(key: string, initialValue: T, secret?: string) => T
    /**
     * Low-latency cross-tab event bus.
     */
    pulse: (channelName: string, callback: (data: any) => void) => { emit: (data: any) => void, stop: () => void }
  }

// --- system ---
  interface SystemTool {
    multiSplit: () => any
  }

// --- text ---
  interface TextTool {
    trim(s: string, c: string, b: number, e: number): string
    capitalize(txt: string): string
    lower(txt: string): string
    upper(txt: string): string
    nl2br(str: string): string
    sanitize(str: string): string
    camelCase: {
      toSpace(string: string): string
      toUnderscore(string: string): string
    }
    fitContainer(el: string): void
  }

// --- timer ---
  interface TimerTool {
    sleep(ms: number): Promise<void>
    percentage(start: string, end: string): string
  }

// --- tools ---
  interface ToolsTool {
    getip(): Promise<void>
    byteSize(bytes: number): string
    zIndex(): number
    zeroToFalse(value: number): boolean | number
  }

// --- translators ---
  interface TranslatorsTool {
    convertMatrixToScale(values: any): number
  }

// --- triggers ---
  interface TriggersTool {
    /**
     * Add a trigger for custom events.
     * @param event - The event name
     * @param callback - The callback to execute when the event is triggered
     */
    add: (event: string, callback: (...args: any[]) => void) => void
  
    /**
     * Listen for a trigger event (alias for add).
     */
    on: (event: string, callback: (...args: any[]) => void) => void
  
    /**
     * Emit a trigger event and call all registered callbacks.
     * @param event - The event name
     * @param args - Arguments to pass to the callbacks
     */
    emit: (event: string, ...args: any[]) => void
  
    /**
     * Remove a trigger event and all its callbacks.
     * @param event - The event name
     */
    remove: (event: string) => void
  
    /**
     * Remove a specific callback from an event.
     * @param event - The event name
     * @param callback - The callback to remove
     */
    off: (event: string, callback: (...args: any[]) => void) => void
  
    /**
     * Clear all triggers.
     */
    clear: () => void
  
    /**
     * List all registered trigger events.
     * @returns Array of event names
     */
    list: () => string[]
  }

// --- types ---
  interface TypesTool {
    of(p: any): string
    instOfObj(p: any): boolean
    isNull(p: any): (p: any) => boolean
    isBool(val: any): boolean
  }

// --- ui ---
  interface UiTool {
    anchorContext(): void
    [key: string]: any
  }

// --- window ---
  interface WindowTool {
    enhancement(): void
    animationframe(): any
    center(params: { url: string; title: string; name: string; w: number; h: number }): void
    onBeforeUnLoad(e: any): void
    purge(d?: Document, time?: number): void
    stopZoomWheel(e: any): void
    setZoom(element?: string, zoom?: number): string
    getZoom(element?: string): number
  }

// --- worker ---
  interface WorkerPool {
    workers: Worker[]
    busy: Set<Worker>
    queue: Array<{ task: any, resolve: Function, reject: Function }>
    size: number
  }
  
  interface WorkerTool {
    create: (src: string, options?: { onmessage?: (e: MessageEvent) => void; onerror?: (e: ErrorEvent) => void }) => Worker
    createInline: (code: string, options?: { onmessage?: (e: MessageEvent) => void; onerror?: (e: ErrorEvent) => void }) => Worker
    post: (worker: Worker, message: any, transferables?: Transferable[]) => void
    terminate: (worker: Worker) => void
    pool: (src: string, size?: number) => WorkerPool
    poolExec: (pool: WorkerPool, tasks: any[]) => Promise<any[]>
    importScripts: (worker: Worker, scripts: string[]) => void
    shared: (src: string, options?: { name?: string; onconnect?: (e: MessageEvent) => void; onmessage?: (e: MessageEvent) => void }) => SharedWorker
  }
// --- AUTO-GENERATED TOOL TYPES END ---

interface SubCommand {
  name: string
  version: string
  example: string
  author: string
  creationDate: string
  lastMod: string
  type: string
  active: boolean
  description: string
  env?: "client" | "server" | "both"
  subCommand: SubCommand[]
}

interface Description {
  name: string
  active: boolean
  subCommand: SubCommand[]
}

interface _dphelper {
  [key: string]: any

  // --- AUTO-GENERATED TOOL MEMBERS START ---
  readonly ai: AiTool
  readonly anchor: AnchorTool
  readonly array: ArrayTool
  readonly audio: AudioTool
  readonly avoid: AvoidTool
  readonly biometric: BiometricTool
  readonly browser: BrowserTool
  readonly check: CheckTool
  readonly color: ColorTool
  readonly compress: CompressTool
  readonly cookie: CookieTool
  readonly coords: CoordsTool
  readonly credits: CreditsTool
  readonly date: DateTool
  readonly disable: DisableTool
  readonly dispatch: DispatchTool
  readonly element: ElementsTool
  readonly events: EventsTool
  readonly fetch: FetchTool
  readonly form: FormTool
  readonly format: FormatTool
  readonly i18n: I18nTool
  readonly image: ImageTool
  readonly json: JsonTool
  readonly load: LoadTool
  readonly logging: LoggingTool
  readonly math: MathTool
  readonly memory: MemoryTool
  readonly navigation: NavigationTool
  readonly net: NetTool
  readonly object: ObjectsTool
  readonly path: PathTool
  readonly promise: PromiseTool
  readonly sanitize: SanitizeTool
  readonly screen: ScreenTool
  readonly scrollbar: ScrollbarTool
  readonly security: SecurityTool
  readonly shortcut: ShortcutTool
  readonly socket: SocketTool
  readonly sse: SseTool
  readonly svg: SvgTool
  readonly sync: SyncTool
  readonly system: SystemTool
  readonly text: TextTool
  readonly timer: TimerTool
  readonly tools: ToolsTool
  readonly translators: TranslatorsTool
  readonly trigger: TriggersTool
  readonly type: TypesTool
  readonly ui: UiTool
  readonly window: WindowTool
  readonly worker: WorkerTool
    // --- AUTO-GENERATED TOOL MEMBERS END ---

  //   setDescription: (description: Description, newObj: any) => void
  //   setProps: (root: any, desc: any, options?: any) => void
  //   _list: {
  //     scripts: Description[]
  //     sockets: any[]
  //     [key: string]: any
  //   }

  version: string
  isServer: boolean
  isBrowser: boolean

}

interface Window {
  [key: string]: any
  dphelper: _dphelper
}

interface globalThis {
  [key: string]: any
}

declare var DPH_APP_CODE: string
declare var DPH_APP_VERSION: string

declare function confirm(message: string, func1: Function, func2?: Function): boolean

declare var dphelper: _dphelper
type dphelper = _dphelper
