import Database from '@tauri-apps/plugin-sql';
import { IBaseSqliteDialectConfig, Promisable, GenericSqliteDialect } from 'kysely-generic-sqlite';

interface TauriSqliteDialectConfig extends IBaseSqliteDialectConfig {
    /**
     * Tauri database instance.
     *
     * @example
     * ```ts
     * import Database from '@tauri-apps/plugin-sql'
     * import { appDataDir } from '@tauri-apps/api/path'
     *
     * const kysely = new Kysely<DB>({
     *   dialect: new TauriSqlDialect({
     *     database: prefix => Database.load(`${prefix}${await appDataDir()}test.db`)
     *   }),
     * })
     * ```
     */
    database: Database | ((prefix: 'sqlite:') => Promisable<Database>);
}

/**
 * https://github.com/tauri-apps/plugins-workspace/tree/dev/plugins/sql
 */
declare class TauriSqliteDialect extends GenericSqliteDialect {
    /**
     * SQLite dialect for Tauri, using [official sql plugin](https://github.com/tauri-apps/plugins-workspace/tree/dev/plugins/sql)
     */
    constructor(config: TauriSqliteDialectConfig);
}

export { TauriSqliteDialect, type TauriSqliteDialectConfig };
