/// <reference path="./../../typings/tsd.d.ts" />
/// <reference path="./layout.ts" />
/// <reference path="./addAnEmail.ts" />
/// <reference path="./uuid.ts" />
interface checkServerResult {
    err:string;
    hostname:Array<string>;
}
var ProxyViaEmail_addAnEmail = (params) => {
    var self = this;
    self.smtpPortNumberList = ko.observableArray(['25','456', '587']);
    self.imapPortNumberList = ko.observableArray(['993','143']);
    self.InputInfo = params.input;
    self.LocalEmailAddPanel = params.LocalEmailAddPanel;
    self.EmailErrorItem = null;
    self.errorMessage = params.errorMessage;
    self.click_addNewEmail = params.click_addNewEmail;
    var testVal = new IsNullValidator();
    var testEmail = new EmailValidator();
    self.eMailAddPanelArray = params.eMailAddPanel;
    self.btn = params.btn;
    self.smtpPortClick = params.smtpPortClick;
    self.components_ProxyViaEmail_addAnEmail = params.components_ProxyViaEmail_addAnEmail;
    self.form_submit = (form: HTMLElement) => {
        var result: Array<AddEmailPanel> = $.grep(self.eMailAddPanelArray(),(e:AddEmailPanel) => {
            return e.dcom_mainBodyId == $(form).attr('id');
        });
        var data1:AddEmailPanel = result[0];
        self.LocalEmailAddPanel = data1;
        data1.EmailErrorItem('');
        data1.PasswordErrorItem('');
        data1.smtpServerErrorItem('');
        data1.fa_exclamation(false);
        data1.fa_checkered(false);
        data1.fa_times(false);
        var emailVal = data1.emailAddress();
        var passwordVal = data1.password();


        if (testVal.isAcceptable(emailVal)) {
            data1.EmailErrorItem('required');
        } else if (!testEmail.isAcceptable(emailVal)) {
            data1.EmailErrorItem('EmailAddress');
        }
        if (testVal.isAcceptable(passwordVal)) {
            data1.PasswordErrorItem('required');
        }
        var result: Array<AddEmailPanel>;
        if (!(data1.EmailErrorItem() + data1.PasswordErrorItem())) {
            result = $.grep(self.eMailAddPanelArray(),(e: AddEmailPanel) => {
                return e.emailAddress() == emailVal && data1.id != e.id;
            });
            if (result.length > 0) {
                data1.EmailErrorItem('SameEmailAddress');
            } else {        //              DATA is Good goto next.......
                data1.emailAddress(emailVal);
                data1.emailStatus(1);
                data1.fa_cog(true);
                data1.EmailIconPanelShow(true);
                $(form).removeClass('in');
                
                var event = uuid_generate();
                sock.on(event,(s:checkServerResult) => {      // CONNECT FROM SERVER
                    //                          
                    //                          
                    //                          
                    //                          4 == Domain OK
                    //                          0 == SMTP OK
                    data1.fa_cog(false);
                    var e = s.err;
                    if (s.hostname != undefined && s.hostname.length > 0) {
                        var t = s.hostname;
                        //data1.showSmtpServerName(t[0]);
                    }
                    
                    switch (e) {
                        case '1':                       //1 == DOMAIN ERROR
                            data1.fa_times(true);

                            data1.EmailErrorItem('smtpServerDomainErrer');
                            break;
                        case '2':                       //2 == AUTH ERROR
                            data1.emailStatus(3);
                            data1.EmailErrorItem('smtpAuthError');
                            data1.fa_times(true);
                            
                            data1.SmtpServerName(s.hostname[s.hostname.length-1]);
                            break;
                        case '3':                       //3 == SERVER CAN'T BE CONNECT
                            if (data1.emailStatus()<2){
                                data1.EmailErrorItem('smtpServerConnectError');
                                data1.fa_times(true);
                            }
                            break;
                        case '4':
                            data1.emailStatus(2);       // go to check connect
                            data1.fa_cog(true);
                            break;
                        case '0':
                            data1.fa_times(false);
                            break;
                    }
                })
                $.post("/api/emailCheck",
                    {
                        emailAddress: emailVal,
                        password: passwordVal,
                        uuid: event,
                        imapUsername:data1.imapUsername(),
                        imapUserPassword:data1.imapUserPassword(),
                        imapPortNumber:data1.imapPortNumber(),
                        ImapServerName:data1.ImapServerName(),
                        smtpUsername:data1.smtpUsername(),
                        smtpUserPassword:data1.smtpUserPassword(),
                        smtpPortNumber:data1.smtpPortNumber(),
                        smtpServerName:data1.SmtpServerName()
                    },(data, status) => {
                        
                        if (data != '0') {
                            data1.EmailErrorItem('EmailAddress');
                        } 
                    });
            }
        }
    }
    self.deleteBlackPanel = () => {
        params.eMailAddPanel.remove((item:AddEmailPanel) => {
            return (!(item.emailAddress().length>0));
        });
        return true;
    }
    self.SmtpCheckingDown = (data, event) => {
        var o = event.currentTarget.href.split('#')[1];
        var result: Array<AddEmailPanel> = $.grep(self.eMailAddPanelArray(),(e: AddEmailPanel) => {
            return e.dcom_smtpServerInputPanelId == o;
        });
        var data1 = result[0];
        self.LocalEmailAddPanel = data1;
        self.LocalEmailAddPanel.smtpServerInputLoginPanelChecked($('#' + o).hasClass('in'));
        return true;
    }
    self.ImapCheckingDown = (data, event) => {
        var o = event.currentTarget.href.split('#')[1];
        var result: Array<AddEmailPanel> = $.grep(self.eMailAddPanelArray(),(e: AddEmailPanel) => {
            return e.dcom_imapServerInputPanelId == o;
        });
        var data1 = result[0];
        self.LocalEmailAddPanel = data1;
        self.LocalEmailAddPanel.imapServerInputLoginPanelChecked($('#' + o).hasClass('in'));
        return true;
    }
    self.showServerDetailCollapse = (data, event) => {
        var o = event.currentTarget.href.split('#')[1];
        var result: Array<AddEmailPanel> = $.grep(self.eMailAddPanelArray(),(e: AddEmailPanel) => {
            return e.dcom_ServerDetailID == o;
        });
        var data1 = result[0];
        self.LocalEmailAddPanel = data1;
        data1.showServerDetail(!$('#' + o).hasClass('in'));
        return true;
    }
    self.smtpPortNumber = (data,event) => {
        var t = typeof(data) == 'string' ? data:'0';
        var target = (event.currentTarget) ? event.currentTarget : event.srcElement;
        var y = $(target).parent().parent().attr('pve-dcom_mainBodyId');
        var result: Array<AddEmailPanel> = $.grep(self.eMailAddPanelArray(),(e: AddEmailPanel) => {
            return e.dcom_mainBodyId == y;
        });
        self.LocalEmailAddPanel = result[0];
        self.LocalEmailAddPanel.smtpPortNumber(t);
    };
    self.smtpPort = (data,event) => {
        var target = (event.currentTarget) ? event.currentTarget : event.srcElement;
        var y = $(target).parent().parent().attr('pve-dcom_mainBodyId');
        var result: Array<AddEmailPanel> = $.grep(self.eMailAddPanelArray(),(e: AddEmailPanel) => {
            return e.dcom_mainBodyId == y;
        });
        self.LocalEmailAddPanel = result[0];
        self.LocalEmailAddPanel.smtpPortInputShow(true);

    };
    self.imapPortNumber = (data,event) => {
        var t = typeof(data) == 'string' ? data:'0';
        var target = (event.currentTarget) ? event.currentTarget : event.srcElement;
        var y = $(target).parent().parent().attr('pve-dcom_mainBodyId');
        var result: Array<AddEmailPanel> = $.grep(self.eMailAddPanelArray(),(e: AddEmailPanel) => {
            return e.dcom_mainBodyId == y;
        });
        self.LocalEmailAddPanel = result[0];
        self.LocalEmailAddPanel.imapPortNumber(t);
    };
    self.imapPort = (data,event) => {
        var target = (event.currentTarget) ? event.currentTarget : event.srcElement;
        var y = $(target).parent().parent().attr('pve-dcom_mainBodyId');
        var result: Array<AddEmailPanel> = $.grep(self.eMailAddPanelArray(),(e: AddEmailPanel) => {
            return e.dcom_mainBodyId == y;
        });
        self.LocalEmailAddPanel = result[0];
        self.LocalEmailAddPanel.imapPortInputShow(true);

    };
}