/**
 * 基于原生JavaScript的扩展支持
 */
import Enum from './foundation/enum.ts';
import Menu from './foundation/menu.ts';
import Properties from './foundation/properties.ts';
import SafePromise from './foundation/safe-promise.ts';
import Validator from './foundation/validator.ts';
import Wechat from './foundation/wechat.ts';
import Yaml from './foundation/yaml.ts';
import util from './util/index.ts';
import * as api from './api/index.ts';
import * as auth from './api/auth.ts';
import * as fss from './api/fss.ts';
import * as meta from './api/meta.ts';
import './tnxcore.css';

export {Enum};
export {Menu};
export {Properties};
export {SafePromise};
export {Validator};
export {Wechat};
export {Yaml};
export {util};

export default class Tnx {

    $id: string;
    foundations = {Enum, Menu, Properties, SafePromise, Validator, Wechat, Yaml};
    libs: Record<string, any> = {};
    util = util;
    api = api;
    auth = auth;
    fss = fss;
    meta = meta;
    global: Record<string, any> = {};

    constructor(apiBaseUrl: string, id = 'tnxcore') {
        this.$id = id + "@" + new Date().format('yyyyMMddHHmmss');
        this.api.setBaseUrl(apiBaseUrl);
        window.tnx = this;
    }

    toast(message: string, theme?: string, options?: { duration?: number }): Promise<void> {
        throw new Error('不支持的方法');
    }

    alert(message: string, options?: { title?: string, confirmButtonText?: string }): Promise<void> {
        const title = options?.title || '提示';
        alert(title + '\n' + message);
        return Promise.resolve();
    }

    success(message: string, options?: { title?: string, confirmButtonText?: string }): Promise<void> {
        return this.alert(message, Object.assign({title: '成功'}, options));
    }

    error(message: string, options?: { title?: string, confirmButtonText?: string }): Promise<void> {
        return this.alert(message, Object.assign({title: '错误'}, options));
    }

    confirm(message: string, options?: {
        title?: string,
        confirmButtonText?: string,
        cancelButtonText?: string,
    }): Promise<boolean> {
        const title = options?.title || '确认';
        const yes = confirm(title + '\n' + message);
        return Promise.resolve(yes);
    }

}
