var plugin = require('topsin.gengui');

var gui = plugin.newGui(plugin.__dirname);

function gen() {
    this.PAUSE = function () {
        console.log("pause");
    }
}

gui.setLang("zhtw"); // zhcn, zhtw, en

var r = gui.msgBox({
    title: "info",
    icon: "info",
    text: "are you ok?",
    buttons: ["Ok", "Cancel"],
    gen: new gen()
});
console.log(r);

r = gui.confirm("are you ok?", "");
console.log(r);
var selected = gui.selectFromTreeview({
    title: "test",
    size: [600, 400],
    selectmode: "single",
    columns: [{
            "name": "id",
            "display": "ID",
            "displayRole": "$id",
            "search": true,
            "resizeMode": "ResizeToContents"
        },
        {
            "name": "name",
            "display": "NAME",
            "displayRole": "$name",
            "search": true,
            "resizeMode": "ResizeToContents"
        }
    ],
    data: [{
            "id": 1,
            "name": "mo"
        },
        {
            "id": 2,
            "name": "ha"
        }
    ],
    returncols: ["id"]
});

console.log(selected);

r = gui.selectFile("choose something", "*", true, "file", "/home/abby/fast_io");
console.log(r);

var elder = [];
for (var i = 0; i < 100; ++i) {
    elder.push({
        "mo": "+1s"
    });
}

var xx = [{
        "mo": "too young too simple"
    },
    {
        "ha": "sometimes naive!"
    },
    {
        "elder": "+1s"
    }
];
r = gui.selectSingle({
    "title": "select your favar",
    "list": xx,
    "default": "",
    "columns": 2,
    size: [200, 300],
    showheader: true,
    "gen": new gen()
});
console.log(r);

r = gui.selectMultiple({
    "title": "select your favar",
    "list": xx,
    "defaultvalue": ["mo"],
    "columns": 2,
    size: [300, 500],
    showheader: true,
    "gen": new gen()
});
console.log(r);

// select_from_layer 
// select_from_job

gui.selectJob({
    title: "select job",
    multiple: false,
    joblist: [
        "too young",
        "too simple",
        "sometimes",
        "naive!"
    ],
    gen: new gen()
});

gui.selectStep({
    title: "select layer",
    multiple: true,
    steplist: ["l1", "l2", "l3"],
    // gen: new gen(),
    size: [300, 500]
});
r = gui.selectFromTable({
    title: "select from table example",
    multiple: true,
    list: [{
            "job": "too young",
            "name": "elder"
        },
        {
            "job": "too simple",
            "name": "elder"
        },
        {
            "job": "sometimes",
            "name": "elder"
        },
        {
            "job": "naive",
            "name": "elder"
        }
    ],
    gen: new gen()
});

console.log(r);

gui.snapScreen({
    file: "xxx",
    dir: "/tmp",
    type: "png",
    overwrite: true
});

gui.imageViewer({
    title: "screenshot",
    file: "/tmp/xxx.png",
    defaultsize: [800, 600]
});

r = gui.inputBox({
    title: "input box example",
    value: "are you ok?",
    size: [300, 200],
    multiline: false
});
console.log(r);

// // refer to ikm6 GUI.showForm
r = gui.showForm({
    title: "注册账号",
    size: [600, 400],
    ui: {
        type: 'ScrollArea',
        property: {
            widget_resizable: true,
            frame_shape: 'NoFrame',
            align: 'Top'
        },
        child: {
            type: 'VBoxLayout',
            property: {
                margin: 2,
                spacing: 20,
                align: 'Top'
            },
            pack: {
                stretch: 0
            },
            child: [{
                type: "FormGridLayout",
                property: {
                    columns: 1,
                    label_alignment: 'Top | Right',
                    margin: 10,
                    spacing: 20
                },
                pack: {
                    stretch: 0
                },
                child: [{
                        name: 'username',
                        type: 'LineEdit',
                        pack: {
                            label: "用户名"
                        },
                        property: {
                            enabled: true
                        }
                    },
                    {
                        name: 'password',
                        type: 'LineEdit',
                        pack: {
                            label: "密码"
                        },
                        property: {
                            echo_mode: "password"
                        }
                    },
                    {
                        name: 'sex',
                        type: 'ComboBox',
                        property: {
                            enabled: true,
                            item_list: [{
                                    name: "male",
                                    icon: "male",
                                    text: "男",
                                    text_zhcn: "男",
                                    text_zhtw: "男"
                                },
                                {
                                    name: "female",
                                    icon: "female",
                                    text: "女",
                                    text_zhcn: "女",
                                    text_zhtw: "女"
                                },
                                {
                                    name: "hideyoshi",
                                    icon: "circle-thin",
                                    text: "Hideyoshi",
                                    text_zhcn: "秀吉",
                                    text_tw: "秀吉"
                                }
                            ]
                        },
                        pack: {
                            label: '性别'
                        }
                    }
                ]
            }]
        }
    },
    data: {
        username: "elder",
        password: "nαive!",
        sex: "male"
    },
    includehide: false,
    buttons: [{
            stock: "ok",
            sensitive: true,
            command: function (data) {

            }
        },
        {
            stock: "cancel",
            sensitive: true,
            command: function (ddata) {

            }
        },
        {
            stock: "help",
            sensitive: true,
            command: function (data) {
                console.log(data);
            }
        }
    ],
    hook: function (data) {},
    gen: new gen()
});

console.log(r);

r = gui.selectLayer({
    title: "+1s",
    //filter: ".*", // regular expression
    selectmode: "single", // single, multiple
    context: "all", // all, board, misc
    layertype: "inner", // default type of layertypelist
    defaultsize: [600, 400], // window size
    layermatrix: {
        layer1: {
            context: "board",
            row: 1,
            name: "layer1",
            layer_type: "inner"
        },
        layer2: {
            row: 2,
            name: "layer2",
            layer_type: "outer"
        },
        layer3: {
            context: "misc",
            row: 3,
            name: "layer3",
            layer_type: "inner"
        }
    },
    layertypelist: [{
            name: "all",
            display_name: "All",
            filter: function (x) {
                return true;
            }
        },
        {
            name: "inner",
            display_name: "Inner",
            filter: function (x) {
                return x["layer_type"] === "inner";
            }
        },
        {
            name: "outer",
            display_name: "Outer",
            filter: function (x) {
                return x["layer_type"] === "outer";
            }
        }
    ],
    gen: new gen()
});
console.log(r);

r = gui.lockUnlockLayer({
    title: "+1s",
    layermatrix: {
        layer1: {
            context: "board",
            row: 1,
            name: "layer1",
            layer_type: "signal"
        },
        layer2: {
            context: "board",
            row: 2,
            name: "layer2",
            layer_type: "drill"
        },
        layer3: {
            context: "misc",
            row: 3,
            name: "layer3",
            layer_type: "rout"
        }
    },
    lockvalue: {
        layer1: true,
        layer2: false
    },
    gen: new gen()
});
console.log(r);

r = gui.passwordBox({
    title: "password box",
    password: "naive!",
    size: [400, 150]
});
console.log(r);

r = gui.selectJobLayer({
    title: "select job layer",
    layertypelist: [{
            name: "mo",
            display_name: "MO",
            filter: function (x) {
                return x.layer_type === "mo";
            }
        },
        {
            name: "ha",
            display_name: "HA",
            filter: function (x) {
                return x.layer_type === "ha";
            }
        }
    ],
    //defaultlayertype: "ha",
    joblist: ["job1", "job2"],
    defaultJob: ["job1"], // select by default
    steplist: ["step1", "step2", "step3", "step4"],
    // defaultstep: "step3",
    showstep: true,
    selectmode: "single", // single/multiple
    layermatrix: {
        "layer1": {
            name: "layer1",
            layer_type: "mo",
            row: 1
        },
        "layer2": {
            name: "layer2",
            layer_type: "ha",
            row: 2
        }
    },
    defaultlayer: ["layer1"]
});

console.log(r);

x = gui.debug({
    title: "debug",
    text: "ciao",
    size: [400, 300],
    gen: new gen()
});

var DB = require('topsin.database');
DB.addConnection({
    database_type: 'pg',
    database_host: '127.0.0.1:5432',
    database_name: 'test',
    database_user: 'abby',
    database_pwd: 'abby'
}, 'test');

x = gui.showSendMail({
    title: "show send mail",
    to: "elder@+1s.gov",
    cc: "elder@moha.me",
    subject: "are you ok?",
    content: "naive!",
    size: [800, 600],
    db: DB.query('test')
});

console.log(x);