import Dialog_Generate from "./ui-generate/Dialog_generate";


/**
 * 确定取消选择框，继承自Dialog_Generate
 */
export class DialogUI extends Dialog_Generate {

    /**显示界面Tween动画 */
    private _showScaleTw = null;
    /**关闭界面Tween动画 */
    private _hideScaleTw = null;

    /** 确定回调 */
    private okCall: () => void;

    /** 取消回调 */
    private noCall: () => void;


    /**
     * 初始化UI界面，监听点击事件，创建tween动画
     */
    protected onStart() {
        this.layer = mw.UILayerDialog;
        this.btn_bg.onClicked.add(() => {
            this.hide();
        });
        this.btn_quit.onClicked.add(() => {
            this.noCall && this.noCall();
            this.hide();
        });
        /**创建tween动画 */
        this._showScaleTw = new mw.Tween({ v: 0, scale: new Vector2(1, 0) })
            .to({ v: 1 }, 200)
            .easing(TweenUtil.Easing.Quadratic.Out)
            .onUpdate((obj) => {
                obj.scale.y = obj.v;
                this.mCanvas.renderScale = obj.scale;
            });
        this._hideScaleTw = new mw.Tween({ v: 1, scale: new Vector2(1, 0) })
            .to({ v: 0 }, 200)
            .easing(TweenUtil.Easing.Quadratic.Out)
            .onUpdate((obj) => {
                obj.scale.y = obj.v;
                this.mCanvas.renderScale = obj.scale;
            }).onComplete(() => {
                mw.UIService.hideUI(this);
            });
    }

    /**
     * 显示弹窗
     * @param title 标题
     * @param content 内容
     * @param yes 确定回调
     * @param yesText 确定文本
     * @param no 取消回调
     * @param noText 取消文本
     */
    public static show(title: string, content: string, yes?: () => void, yesText?: string, no?: () => void, noText?: string) {
        return UIService.show(DialogUI).show(title, content, yes, yesText, no, noText);
    }

    /**
     * 显示弹窗
     * @param title 标题
     * @param content 内容
     * @param yes 确定回调
     * @param yesText 确定文本
     * @param no 取消回调
     * @param noText 取消文本
     */
    public static showOne(title: string, content: string, yes?: () => void, yesText?: string, no?: () => void, noText?: string) {
        return UIService.show(DialogUI).show(title, content, yes, yesText, no, noText, true);
    }

    /**
     * 显示弹窗
     * @param title 标题
     * @param content 内容
     * @param yes 确定回调
     * @param yesText 确定文本
     * @param no 取消回调
     * @param noText 取消文本
     */
    public static tips(content: string, yes?: () => void, yesText?: string) {
        const view = this.showOne("", content, yes || (() => { }), yesText);
        view.btn_quit.visibility = mw.SlateVisibility.Hidden;
    }

    /**
     * 显示界面
     * @param title 界面标题内容
     * @param content 描述内容
     * @param yes 点击确定回调
     * @param yesText 确定文本
     * @param no 点击取消回调
     * @param noText 取消内容
     * @param hideNoForce 是否强制隐藏
     */
    show(title: string, content: string, yes?: () => void, yesText?: string, no?: () => void, noText?: string, hideNoForce?: boolean): this {
        this.okCall = yes;
        this.noCall = no;
        this.btn_quit.visibility = mw.SlateVisibility.Visible;
        this.txt_title.text = title;
        this.txt_content.text = content;
        this.cav_price.visibility = mw.SlateVisibility.Hidden;
        /**Btn*/
        this.btn_confirm_one.onClicked.clear();
        this.btn_confirm.onClicked.clear();
        this.btn_cancel.onClicked.clear();
        if (yes && (no && !hideNoForce)) {
            /**两个按钮*/
            this.btn_confirm_one.visibility = mw.SlateVisibility.Hidden;
            this.btn_confirm.visibility = mw.SlateVisibility.Visible;
            this.btn_cancel.visibility = mw.SlateVisibility.Visible;
            yesText && (this.txt_confirm.text = yesText);
            this.btn_confirm.onClicked.add(() => {
                this.okCall && this.okCall();
                this.hide();
            });
            noText && (this.txt_cancel.text = noText);
            this.btn_cancel.onClicked.add(() => {
                this.noCall && this.noCall();
                this.hide();
            });
        } else if (yes && (!no || hideNoForce)) {
            /**一个按钮*/
            this.btn_confirm_one.visibility = mw.SlateVisibility.Visible;
            this.btn_confirm.visibility = mw.SlateVisibility.Hidden;
            this.btn_cancel.visibility = mw.SlateVisibility.Hidden;
            yesText && (this.txt_confirm.text = yesText);
            this.btn_confirm_one.onClicked.add(() => {
                this.okCall && this.okCall();
                this.hide();
            });
        } else {
            /**无按钮*/
            this.btn_confirm_one.visibility = mw.SlateVisibility.Hidden;
            this.btn_confirm.visibility = mw.SlateVisibility.Hidden;
            this.btn_cancel.visibility = mw.SlateVisibility.Hidden;
        }
        mw.UIService.showUI(this, this.layer);
        if (this._hideScaleTw.isPlaying()) {
            this._hideScaleTw.stop();
        }
        this._showScaleTw.start();
        return this;
    }

    onHide() {
        this.okCall = null;
        this.noCall = null;
    }

    /**
     * 设置价格
     * @param price 价格
     */
    setPrice(price: number) {
        this.cav_price.visibility = mw.SlateVisibility.SelfHitTestInvisible;
        if (price) {
            this.txt_price.text = price.toString();
        } else {
            this.txt_price.text = "0";
        }
    }

    /**
     * 隐藏界面，播放关闭动效
     */
    hide() {
        if (!this._hideScaleTw.isPlaying()) {
            this._hideScaleTw.start();
        }
    }
}