import { App } from "../../App";
import { BindableProperty } from "../../core/BindableProperty";
import FormattedString from "../../core/FormattedString";
import { Inject } from "../../di/Inject";
import { AtomWindowViewModel } from "../../view-model/AtomWindowViewModel";
import MarkdownService from "../services/MarkdownService";
import AtomAlertWindowStyle from "../styles/AtomAlertWindowStyle";
import { AtomControl } from "./AtomControl";
import { AtomWindow } from "./AtomWindow";

export default class AtomAlertWindow extends AtomWindow {

    protected create(): void {
        this.defaultControlStyle =  AtomAlertWindowStyle ;
        this.viewModel = this.resolve(AtomAlertViewModel);

        this.windowTemplate = AtomAlertWindowTemplate;
        this.commandTemplate =  AtomAlertWindowCommandBar;
        // this.bind(this.element, "title", [["viewModel", "title"]]);
    }
}

class AtomAlertWindowTemplate extends AtomControl {

    protected create(): void {
        const div = document.createElement("div");

        this.append(div);

        this.bind(div, "formattedText", [["viewModel", "message"]]);

    }
}

class AtomAlertWindowCommandBar extends AtomControl {

    protected create(): void {

        const okButton = document.createElement("button");

        const cancelButton = document.createElement("button");
        this.append(okButton);
        this.append(cancelButton);
        this.setPrimitiveValue(okButton, "class", "yes-button" );
        this.setPrimitiveValue(cancelButton, "class", "no-button" );

        this.bind(okButton, "text", [["viewModel", "okTitle"]]);
        this.bind(cancelButton, "text", [["viewModel", "cancelTitle"]]);

        this.bind(okButton, "styleDisplay", [["viewModel", "okTitle"]], false, (v) => v ? "" : "none");
        this.bind(okButton, "styleMarginBottom", [["viewModel", "cancelTitle"]], false, (v) => v ? "0" : "10px");
        this.bind(cancelButton, "styleDisplay", [["viewModel", "cancelTitle"]], false, (v) => v ? "" : "none");

        this.bindEvent(okButton, "click", (e) => {
            this.viewModel.onOkClicked();
        });

        this.bindEvent(cancelButton, "click", (e) => {

            this.viewModel.onCancelClicked();
        });
    }
}
class AtomAlertViewModel extends AtomWindowViewModel {

    @BindableProperty
    public title: string;

    @BindableProperty
    public message: string;

    @BindableProperty
    public okTitle: string;

    @BindableProperty
    public cancelTitle: string;

    public onOkClicked(): void {
        this.close(true);
    }

    public onCancelClicked(): void {
        this.cancel();
    }
}
