BI.config("dec.constant.intelligence.cluster.file.server", function (items) {
    items.push({
        value: "S3", // 地址栏显示的hash值
        id: "decision-intelligence-cluster-file-s3", // id
        text: "S3", // 文字
        cardType: "dec.intelligence.cluster.file.s3",
        workRoot: false,
    });

    return items;
});


!(function () {
    var LABEL_WIDTH = 107, EDITOR_WIDTH = 393;
    var S3 = BI.inherit(BI.Widget, {

        props: {
            baseCls: "dec-cluster-ftp",
            value: {},
        },

        _store: function () {
            return BI.Models.getModel("dec.model.intelligence.cluster.file.s3", {
                value: this.options.value,
            });
        },

        render: function () {
            var self = this, o = this.options;

            return {
                type: "bi.vertical",
                tgap: 15,
                items: [
                    {
                        type: "dec.label.editor.item",
                        textWidth: LABEL_WIDTH,
                        editorWidth: EDITOR_WIDTH,
                        watermark: BI.i18nText("Plugin-S3_Input"),
                        text: BI.i18nText("Plugin-S3_End_Point"),
                        value: this.model.endPoint,
                        el: {
                            disabled: !o.editable,
                        },
                        ref: function (_ref) {
                            self.endPointRow = _ref;
                        },
                        listeners: [{
                            eventName: BI.Editor.EVENT_CHANGE,
                            action: function () {
                                self.store.setEndPoint(this.getValue());
                            },
                        }],
                    }, {
                        type: "dec.label.editor.item",
                        textWidth: LABEL_WIDTH,
                        editorWidth: EDITOR_WIDTH,
                        watermark: BI.i18nText("Plugin-S3_Input"),
                        text: BI.i18nText("Plugin-S3_Region"),
                        value: this.model.region,
                        el: {
                            disabled: !o.editable,
                        },
                        ref: function (_ref) {
                            self.regionRow = _ref;
                        },
                        listeners: [{
                            eventName: BI.Editor.EVENT_CHANGE,
                            action: function () {
                                self.store.setRegion(this.getValue());
                            },
                        }],
                    }, {
                        type: "dec.label.editor.item",
                        textWidth: LABEL_WIDTH,
                        editorWidth: EDITOR_WIDTH,
                        watermark: BI.i18nText("Plugin-S3_Input"),
                        text: BI.i18nText("Plugin-S3_Access_Key_Id"),
                        value: this.model.accessKeyId,
                        el: {
                            disabled: !o.editable,
                        },
                        ref: function (_ref) {
                            self.portRow = _ref;
                        },
                        listeners: [{
                            eventName: BI.Editor.EVENT_CHANGE,
                            action: function () {
                                self.store.setAccessKeyId(this.getValue());
                            },
                        }],
                    },
                    {
                        type: "dec.common.cipher.editor",
                        textWidth: LABEL_WIDTH,
                        editorWidth: EDITOR_WIDTH,
                        watermark: BI.i18nText("Plugin-S3_Access_Key_Secret"),
                        text: BI.i18nText("Plugin-S3_Access_Key_Secret"),
                        value: this.model.password,
                        el: {
                            disabled: !o.editable,
                        },
                        ref: function (_ref) {
                            self.passwordRow = _ref;
                        },
                    },
                    {
                        type: "dec.label.editor.item",
                        textWidth: LABEL_WIDTH,
                        editorWidth: EDITOR_WIDTH,
                        watermark: BI.i18nText("Plugin-S3_Bucket"),
                        text: BI.i18nText("Plugin-S3_Bucket"),
                        value: this.model.bucket,
                        el: {
                            disabled: !o.editable,
                        },
                        listeners: [{
                            eventName: BI.Editor.EVENT_CHANGE,
                            action: function () {
                                self.store.setBucket(this.getValue());
                            },
                        }],
                    },
                    {
                        type: "dec.label.editor.item",
                        el: {
                            disabled: !o.editable,
                        },
                        textWidth: LABEL_WIDTH,
                        editorWidth: EDITOR_WIDTH,
                        watermark: BI.i18nText("Dec-Please_Input"),
                        text: BI.i18nText("Dec-Basic_Path"),
                        value: this.model.workRoot,
                        ref: function (_ref) {
                            self.filePathRow = _ref;
                        },
                    }, {
                        type: "bi.vertical_adapt",
                        items: [{
                            type: "bi.icon_change_button",
                            iconCls: this.model.isOpen ? "expander-down-font" : "expander-right-font",
                            ref: (_ref) => {
                                this.OtherConfigButton = _ref;
                            },
                            handler: () => {
                                this.store.setIsOpen(!this.model.isOpen);
                                this.OtherConfigButton.setIcon(this.model.isOpen ? "expander-down-font" : "expander-right-font");
                            }
                        }, {
                            type: "bi.text_button",
                            text: BI.i18nText('Plugin-S3_Other_Config'),
                            handler: () => {
                                this.store.setIsOpen(!this.model.isOpen);
                                this.OtherConfigButton.setIcon(this.model.isOpen ? "expander-down-font" : "expander-right-font");
                            }
                        }]
                    }, {
                        type: 'bi.vertical',
                        invisible: () => !this.model.isOpen,
                        items: [{
                            type: "dec.label.editor.item",
                            textWidth: LABEL_WIDTH,
                            editorWidth: EDITOR_WIDTH,
                            watermark: BI.i18nText("Plugin-S3_Input"),
                            text: "PathStyleAccess",
                            value: String(this.model.enablePathStyleAccess),
                            ref: function (_ref) {
                                self.enablePathStyleAccessRow = _ref;
                            },
                            el: {
                                disabled: !o.editable,
                            },
                            listeners: [{
                                eventName: BI.Editor.EVENT_CHANGE,
                                action: function () {
                                    self.store.setEnablePathStyleAccess(this.getValue());
                                }
                            }]
                        }, {
                            type: "dec.label.editor.item",
                            textWidth: LABEL_WIDTH,
                            editorWidth: EDITOR_WIDTH,
                            watermark: BI.i18nText("Plugin-S3_Input"),
                            text: "SignerOverride",
                            value: this.model.signerOverride,
                            el: {
                                disabled: !o.editable,
                            },
                            tgap: 15,
                            listeners: [{
                                eventName: BI.Editor.EVENT_CHANGE,
                                action: function () {
                                    self.store.setSignerOverride(this.getValue());
                                }
                            }]
                        }],
                    }
                ]
            };
        },

        getValue: function () {
            var enablePathStyleAccess = false;
            if (this.model.enablePathStyleAccess === 'true') {
                enablePathStyleAccess = true;
            }

            return {
                endPoint: this.model.endPoint,
                region: this.model.region,
                accessKeyId: this.model.accessKeyId,
                password: this.passwordRow.getCompleteCipher(),
                bucket: this.model.bucket,
                workRoot: this.filePathRow.getValue(),
                enablePathStyleAccess,
                signerOverride: this.model.signerOverride,
            };
        },

        validation: function () {
            var valid = true;
            var path = this.filePathRow.getValue();
            if (Dec.Utils.strLength(path) > DecCst.STRING_SHORT_TEXT_LENGTH) {
                this.filePathRow.showError(BI.i18nText("Dec-Error_Length_Greater_Than_Short_Text"));
                valid = false;
            }
            if (BI.startWith(path, "/") || !BI.endWith(path, "/")) {
                this.filePathRow.showError(BI.i18nText("Dec-Error_Start_With_Slash_Or_End_Without_Slash"));
                valid = false;
            }
            if (!BI.isKey(path)) {
                this.filePathRow.showError(BI.i18nText("Dec-Error_Null"));
                valid = false;
            }
            if (!(this.model.enablePathStyleAccess === 'false' || this.model.enablePathStyleAccess === 'true')) {
                this.enablePathStyleAccessRow.showError(BI.i18nText("Plugin-S3_EnablePathStyleAccess_Error_Tip"));
                valid = false;
            }

            return valid;
        },

    });
    BI.shortcut("dec.intelligence.cluster.file.s3", S3);
}());


!(function () {
    var Model = BI.inherit(Fix.Model, {

        state: function () {
            var val = this.options.value;

            return {
                endPoint: val.endPoint,
                region: val.region,
                accessKeyId: val.accessKeyId,
                password: val.password,
                bucket: val.bucket,
                workRoot: val.workRoot,
                isOpen: false,
                enablePathStyleAccess: String(val.enablePathStyleAccess) ?? '',
                signerOverride: val.signerOverride,
            };
        },

        computed: {
            encodingArray: function () {
                return BI.map(DecCst.EncodeConstants.ENCODING_ARRAY, function (i, v) {
                    return {
                        value: v,
                    };
                });
            },
        },

        actions: {
            setEndPoint: function (v) {
                this.model.endPoint = v;
            },

            setRegion: function (v) {
                this.model.region = v;
            },

            setAccessKeyId: function (v) {
                this.model.accessKeyId = v;
            },

            setBucket: function (v) {
                this.model.bucket = v;
            },

            setEnablePathStyleAccess: function (v) {
                this.model.enablePathStyleAccess = v;
            },

            setSignerOverride: function (v) {
                this.model.signerOverride = v;
            },

            setIsOpen: function (v) {
                this.model.isOpen = v;
            },
        },
    });
    BI.model("dec.model.intelligence.cluster.file.s3", Model);
}());