import {
    inject,
    observer
} from 'mobx-react';
import {
    WeaUpload,
    WeaDialog,
    WeaFormItem,
    WeaSearchGroup,
    WeaNewScroll,
    WeaSelect,
    WeaInput,
    WeaAlertPage,
    WeaLocaleProvider
} from 'ecCom'

import {
    Row,
    Col,
    Button,
    Spin
} from 'antd'

import {
    WeaSwitch
} from 'comsMobx'
import React from 'react'
import {
    i18n
} from '../../public/i18n';
import { addContentPath, renderNoright } from '../../util/index.js'
import '../../style/common.less'
const getLabel = WeaLocaleProvider.getLabel;

@inject('datasImport')
@inject('resource')
@observer
export default class DatasImport extends React.Component {
    constructor(props) {
        super(props);
    }

    componentDidMount() {
        const {
            datasImport
        } = this.props;
        datasImport.list = [];
    }

    getCircle() {
        let style = {
            width: 20,
            height: 20,
            backgroundColor: '#D8D8D8',
            webkitBorderRadius: 10,
            mozBorderRadius: 10,
            msBorderRadius: 10,
            oBorderRadius: 10,
            borderRadius: 10,
            //paddingLeft: 6,
            textAlign: 'center',
        }
        return style;
    }

    getForm() {
        const {
            datasImport
        } = this.props;
        const {
            condition
        } = datasImport;
        let _arr = [];

        condition.map((c, i) => {
            let arr = [];
            if (i == 0) { //基本信息
                c.items.map((field, index) => {
                    arr.push({
                        com: (
                            <div>
                                <Row ecId={`${this && this.props && this.props.ecId || ''}_Row@m9t2kn@${index}`}>
                                    <Col ecId={`${this && this.props && this.props.ecId || ''}_Col@rc5who@${index}`} span={1} offset={4}>
                                        <div style={{ marginTop: 15 }}>
                                            <div style={this.getCircle()}><div style={{ paddingTop: 2 }}>{index + 1}</div></div>
                                        </div>
                                    </Col>
                                    <Col ecId={`${this && this.props && this.props.ecId || ''}_Col@f1sc6s@${index}`} span={14}>
                                        <div style={{ marginTop: 15 }}>
                                            <Row ecId={`${this && this.props && this.props.ecId || ''}_Row@5gsx6o@${index}`}>
                                                <Col ecId={`${this && this.props && this.props.ecId || ''}_Col@qrdxst@${index}`} span={field.labelcol} style={{ overflow: 'hidden', whiteSpace: 'nowrap', textOverflow: 'ellipsis' }} title={field.label}>{field.label}:</Col>
                                                <Col ecId={`${this && this.props && this.props.ecId || ''}_Col@7jy5um@${index}`} span={field.fieldcol}>
                                                    {this.getDom(field)}
                                                </Col>
                                            </Row>
                                        </div>
                                    </Col>
                                </Row>
                            </div>
                        ),
                        colSpan: 1,
                    })
                })
            }
            if (i == 1) { //导入说明
                c.items.map((field, index) => {
                    arr.push({
                        com: (
                            <div>
                                <Row ecId={`${this && this.props && this.props.ecId || ''}_Row@hz50xl@${index}`}>
                                    <Col ecId={`${this && this.props && this.props.ecId || ''}_Col@fgfbrv@${index}`} span={1} offset={4} style={{ marginTop: 15 }}>
                                        <div style={this.getCircle()}>
                                            <div style={{ paddingTop: 2 }}>{index + 1}</div>
                                        </div>
                                    </Col>
                                    <Col ecId={`${this && this.props && this.props.ecId || ''}_Col@5rom81@${index}`} span={17} style={{ marginTop: 15 }}>
                                        {this.getIllustration(field.value, field.link, index, field)}
                                    </Col>
                                </Row>
                            </div>
                        ),
                        colSpan: 1
                    })
                })
            }
            _arr.push(<div><WeaSearchGroup ecId={`${this && this.props && this.props.ecId || ''}_WeaSearchGroup@bo47pp@${i}`} needTigger={true} title={c.title} showGroup={c.defaultshow} items={arr} col={1} /></div>)

        });
        return _arr;
    }

    getDom(field) {
        const {
            datasImport
        } = this.props;
        const {
            templetName,
            filelist,
            getTemplateUrl,
            importParams
        } = datasImport;
        let dom;
        let domkey = field.domkey;
        if (domkey[0] == 'templet') {
            dom = <a href={addContentPath(field.value)}>{i18n.label.importTemplate()}</a>;
        } else if (domkey[0] === 'exportData') {
            const href = datasImport.operateType === 'add' ? field.otherParams.fileVal[0].add : field.otherParams.fileVal[0].update;
            if (datasImport.importType === 'matrix') {
                dom = <a onClick={() => {
 getTemplateUrl(datasImport.otherParams.matrixid, datasImport.operateType, importParams) 
}}>{i18n.label.importTemplate()}</a>
            } else
                dom = <a href={addContentPath(href)}>{i18n.label.importTemplate()}</a>;
        } else if (domkey[0] == 'excelfile' || domkey[0] == 'importfile') {
            dom = (<div>
                <div style={{ float: 'left', marginTop: -10 }}>
                    <WeaUpload ecId={`${this && this.props && this.props.ecId || ''}_WeaUpload@iu8n01`}
                        uploadUrl='/api/doc/upload/uploadFile'
                        category='string'
                        limitType='xls,xlsx'
                        maxFilesNumber={1}
                        datas={filelist}
                        {...field.otherParams}
                        onChange={
                            (ids, list) => {
                                this.setFileId(ids, list)
                            }
                        } >
                        <Button ecId={`${this && this.props && this.props.ecId || ''}_Button@87232v`}>{i18n.button.selectFile()}</Button>
                    </WeaUpload>
                </div>
                <div style={{ float: 'left', paddingLeft: 10 }}>
                    {filelist.length == 0 ? <p>{i18n.label.noFileSelected()}</p> : filelist.map(file => <p>{file.filename}</p>)}
                </div>
            </div>)
        } else if (domkey[0].indexOf('keyField') > -1) {
            const vals = field.options.filter(v => v.selected == true);
            let val = '';
            vals.length > 0 && (val = vals[0].key);
            dom = <WeaSelect ecId={`${this && this.props && this.props.ecId || ''}_WeaSelect@yzc92h`}
                style={{ width: 200 }}
                options={field.options}
                value={datasImport.importParams[domkey[0]] || field.value || val}
                onChange={(v) => {
 datasImport.setParam(domkey[0], v) 
}}
            />
        } else if (domkey[0] == 'importType') {
            dom = <WeaSelect ecId={`${this && this.props && this.props.ecId || ''}_WeaSelect@holhhb`}
                style={{ width: 200 }}
                options={field.options}
                value={datasImport.operateType}
                onChange={(v) => {
 datasImport.operateType = v 
}}
            />
        } else {
            dom = <WeaInput ecId={`${this && this.props && this.props.ecId || ''}_WeaInput@rg6f3p`} hasBorder={true} viewAttr={1} value={field.value} />
        }
        return dom;
    }

    getIllustration(val, url, index, link) {
        const {
            datasImport
        } = this.props;
        const {
            templetName,
            getTemplateUrl,
            importParams
        } = datasImport;
        let p;
        if (index == 0) {
            if (url instanceof Object) {
                const href = datasImport.operateType === 'add' ? url.add : url.update;
                let dom;
                if (datasImport.importType === 'matrix') {
                    dom = <a onClick={() => {
 getTemplateUrl(datasImport.otherParams.matrixid, datasImport.operateType, importParams) 
}}>{i18n.label.importTemplate()}</a>
                } else
                    dom = <a href={addContentPath(href)}>{i18n.label.importTemplate()}</a>;
                p = (<p>{i18n.label.downLoadTemplete()}：{dom}</p>);
            } else if (url != null) {
                if (datasImport.importType === 'matrix') {
                    p = (<p>{i18n.label.downLoadTemplete()}：<a onClick={() => {
 getTemplateUrl(datasImport.otherParams.matrixid, datasImport.operateType) 
}}>{i18n.label.importTemplate()}</a></p>);
                } else
                    p = (<p>{i18n.label.downLoadTemplete()}：<a href={addContentPath(url)}>{i18n.label.importTemplate()}</a></p>);
            } else {
                p = (<p><div dangerouslySetInnerHTML={{ __html: val }} /></p>);
            }
        } else {
            p = (<p><div dangerouslySetInnerHTML={{ __html: val }} /></p>);
        }
        return p;
    }

    setFileId(ids, list) {
        const {
            datasImport
        } = this.props;
        datasImport.excelfile = ids;
        datasImport.filelist = list;
    }

    onUploading(s) {
        const {
            datasImport
        } = this.props;
        datasImport.status = s;
    }

    submit() {
        const {
            datasImport,
            resource
        } = this.props;
        datasImport.saveImport({}, () => {
            this.refs.scroll && this.refs.scroll.scrollToLast();
        });

        // resource.getTableInfo();
        // resource.getHasRight();
    }

    cancel() {
        const {
            datasImport,
            onClose
        } = this.props;
        datasImport.visible = false
        datasImport.init();
        onClose && onClose();
    }

    importHistoryQuery() {
        const {
            datasImport
        } = this.props;
        datasImport.visibleHistory = true;
        datasImport.getImportHistory();
    }

    render() {
        const {
            datasImport,
            mainTitle,
            importLog,
            viewLog,
            viewLogTitle,
        } = this.props;
        const {
            title,
            visible,
            titleResult,
            visibleResult,
            importResultColumns,
            importProcessLogDatas,
            failnum,
            succnum,
            importResultTip,
            importResultStore,
            importStatus,
            errorInfo,
            setScrollRef,
            single,
            showLoadingSpin,
            condition
        } = datasImport;
        const buttons = condition.length ? [
            (<Button ecId={`${this && this.props && this.props.ecId || ''}_Button@ip7b32`} type="primary" onClick={() => this.submit()}>{i18n.button.submit()}</Button>),
        ] : [];

        let dialogHeight = window.innerHeight - 150;
        if (dialogHeight > 560) dialogHeight = 560;

        return (
            <div>
                {
                        <WeaDialog ecId={`${this && this.props && this.props.ecId || ''}_WeaDialog@s55z5q`}
                            title={mainTitle || title}
                            icon="icon-coms-hrm"
                            iconBgcolor="#217346"
                            visible={visible}
                            closable={true}
                            onCancel={() => this.cancel()}
                            buttons={buttons}
                            style={{ width: 870, height: dialogHeight }}
                            moreBtn={{
                                datas: condition ? [{
                                    key: '1',
                                    content: i18n.button.submit(),
                                    icon: <i className='icon-coms-Preservation' />,
                                    onClick: () => this.submit(),
                                }] : []
                            }}
                        >
                            {condition.length ? (
                                <Spin ecId={`${this && this.props && this.props.ecId || ''}_Spin@1fvd3j`} spinning={showLoadingSpin}>
                                    <WeaNewScroll ecId={`${this && this.props && this.props.ecId || ''}_WeaNewScroll@2908z2`} height={dialogHeight} ref="scrollBar">
                                        {this.getForm()}
                                    </WeaNewScroll>
                                </Spin>
                            ) : <div></div>
                            }
                        </WeaDialog>
                }

            </div>
        )
    }
}

