/**
 * 事务页面。 根据接口。达到增删发起事务流程
 * 2019年10月23日 09:48:13
 * 钟是志
 *
 * */

import { message, Modal } from 'antd';
import React, { useEffect, useState } from 'react';
import * as service from '../publicApiService';
import * as destructionFunc from '../destruction';
import { Link } from 'dva/router';
import { getApplyPage } from '../publicApiService';
import { getToken } from '@/utils/authority';
import JustApply from './JustApply';
import PageHeaderWrapper from '@/components/PageHeaderWrapper';
import List from './List';
import pageSetting from './pageSetting';
import ButtonDiy from '@/baseComponent/ButtonDiy';
import Shell from '@/baseComponent/Shell';
import { deepCopy, getIsBei_Dian } from '@/webPublic/zyd_public/utils/utils';
import ApplyForZyd from '@/webPublic/one_stop_public/ForZydApply/index';
import rebackButton from '@/webPublic/FormInsertDiy/AffairPage/ApplyPage/ReBackButton';

export default function index(props) {
	const { state = {} } = props.location;
	const [show, setShow] = useState(false);
	useEffect(
		() => {
			setShow(false);
			setTimeout(() => {
				setShow(true);
			}, 100);
		},
		[props.location.pathname],
	);
	if (!show) {
		return null;
	}
	if (state.justApply) {
		return <JustApply {...props} />;
	} else {
		return <AffairPage {...props} />;
	}
}

class AffairPage extends React.Component {
	constructor(props) {
		super(props);
		let pathname = this.props.location.pathname;
		const { workId } = this.props;
		this.state = {
			showIframe: false,
			columns: [],
			pathname,
			workId: workId || '',
			searchCondition: [],
			dataBaseId: '',
			addFields: [], // 新增时填写的字段。
			renderIframe: false,
			allConfigSetInfo: null,
      serviceInfo: null,
		};
	}

	getServiceDetail = (serviceId) => {
		service.getServiceDetail(serviceId).then((res) => {
      this.setState({
          serviceInfo: res,
        });
		});
	};

	getFormDetail = (workId) => {
		service.getFormDetail(workId).then((response) => {
			if (typeof response.unifiedServicePatternModel === 'undefined') {
				return false;
			}
			if(response.serviceId){
			  this.getServiceDetail(response.serviceId);
      }
			destructionFunc.destructionGetDetail(response).then((x) => {
				const { addFields, tableInfo, allConfigSetInfo } = x;
				this.setState(
					{
						addFields,
						tableInfo,
						allConfigSetInfo,
					},
					() => {
						this.giveDetailColumns();
					},
				);
			});
		});
	};

	giveDetailColumns = () => {
		const { columns, workId, dataBaseId, addFields } = this.state;
		const process_status = columns.find((x) => {
			return x.name === 'process_status';
		});
		if (process_status && process_status.dataIndex) {
			process_status.render = (text, record) => {
				return record.statusName || record[process_status.dataIndex];
			};
		}
		let findCz = columns.find((g) => g.dataIndex === 'operation');
		if (!findCz) {
			columns.push({
				dataIndex: 'operation',
				title: '操作',
				fixed: columns.length > 12 ? 'right' : false,
				render: (text, record) => {
					return (
						<Link
							to={{
								pathname: './Detail',
								state: {
									workId,
									dataBaseId,
									record,
									addFields,
								},
							}}>
							详情
						</Link>
					);
				},
			});
		}

		this.setState({
			columns,
		});
	};

	handleButtonSet = () => {
		const { canApply, otherButtons = [] } = this.props;
		const { allConfigSetInfo, serviceInfo } = this.state;
		if (!allConfigSetInfo) {
			return [];
		}
		const isCloseStart = allConfigSetInfo?.isCloseStart;

		if (canApply === false || isCloseStart) {
			return [...otherButtons];
		}

		return [
			{
				type: 'add',
				name: '申请',
				component: 'Normal',
				handleClick: () => {
					this.setState(
						{
							showIframe: true,
							renderIframe: true,
						},
						() => {},
					);
				},
			},
			...rebackButton(serviceInfo),
			...otherButtons,
		];
	};

	handleSearchSet = () => {
		const { columns, searchCondition } = this.state;
		const { onResponse } = this.props;
		const pageSearch = {
			search: {
				field: {},
				getPageService: getApplyPage,
				responseCallBack: (response) => {
					if (onResponse) {
						onResponse(response);
					}
					return response;
				},
				condition: searchCondition,
				nameSpan: {
					big: 8,
					small: 9,
				},
				fileSpan: {
					big: 4,
					small: 4,
				},
			},
			tableRowKey: 'id',
			columns,
		};
		return pageSearch;
	};

	getColumns = () => {
		const { workId } = this.state;
		service.getColumns(workId).then((response) => {
			if (response && Array.isArray(response)) {
				response = response.filter((x) => {
					return x.title !== '流程进度';
				});
			}

			if (response) {
				this.setState(
					{
						columns: response,
					},
					() => {
						this.getFormDetail(workId);
					},
				);
			}
		});
	};

	initData = () => {
		if (!getToken()) {
			message.error('您的数据未同步,请联系管理员!');
			return false;
		}
		const { pathname } = this.state;
		const { dataBaseId, workId, iframeHeight } = this.props;
		if (dataBaseId || workId) {
			this.setState(
				{
					workId,
					dataBaseId,
				},
				() => {
					this.getColumns();
				},
			);
		} else {
			service.getId(pathname).then((x) => {
				this.setState(
					{
						workId: x.workId,
						dataBaseId: x.dataBaseId,
					},
					() => {
						this.getColumns();
					},
				);
			});
		}

		window.addEventListener(
			'message',
			(event) => {
				if (event.data === 'returnList') {
					this.returnList(true);
				}
				if (event && event.data && event.data.indexOf && event.data.indexOf('iframeHeight') > -1) {
					let height = Number(event.data.split('-')[1]);
					const iframe = document.getElementById('applyIframeId');
					if (iframe) {
						iframe.height = height + (iframeHeight || 50);
					}
				}
			},
			false,
		);

		return true;
	};

	componentDidMount() {
		this.initData();
	}

	componentDidUpdate(prevProps, prevState) {
		if (prevProps.workId !== this.props.workId) {
			this.initData();
		}
	}

	returnList = (needSearchList = false) => {
		const { workId } = this.state;
		this.setState(
			{
				renderIframe: false,
			},
			() => {
				if (needSearchList) {
					this.ListComponent.getPage();
					setTimeout(() => {
						this.getFormDetail(workId);
					}, 2000);
				}
				this.setState({
					showIframe: false,
				});
			},
		);
	};

	render() {
		const { iframeUrlDiy } = this.props;
		const {
			workId,
			dataBaseId,
			addFields,
			showIframe,
			renderIframe,
			allConfigSetInfo,
		} = this.state;
		if (!workId || !allConfigSetInfo) {
			return null;
		}

		let buttons = this.handleButtonSet({});
		let listConfig = pageSetting.listConfig;
		if (!buttons.length) {
			listConfig = deepCopy(listConfig);
			listConfig.buttonArea = false;
		}
		return (
			<PageHeaderWrapper title="">
				<div
					style={{
						display: showIframe ? 'none' : 'block',
					}}>
					<List
						listConfig={listConfig}
						pageButton={buttons}
						pageSearch={this.handleSearchSet({})}
						addFields={addFields}
						ref={(ListComponent) => (this.ListComponent = ListComponent)}
						workId={workId}
						dataBaseId={dataBaseId}
					/>
				</div>
				<div
					style={{
						visibility: showIframe ? 'visible' : 'hidden',
						height: showIframe ? 'auto' : '0px',
						width: '100%',
						backgroundColor: '#fff',
						paddingLeft: '24px',
					}}>
					<Shell>
						<div
							style={{
								height: '54px',
								padding: '12px 0 12px 12px',
								display: showIframe ? 'block' : 'none',
							}}>
							<ButtonDiy
								name="返回"
								className="defaultBlue"
								handleClick={this.returnList}
								icon="arrow-left"
							/>
						</div>
					</Shell>
					{renderIframe ? (
						iframeUrlDiy ? (
							<iframe
								src={iframeUrlDiy}
								frameBorder={0}
								id="applyIframeId"
								name="applyIframe"
								marginWidth="0"
								marginHeight="0"
								allowTransparency="yes"
								seamless
								scrolling={'auto'}
								style={{
									width: '100%',
									minHeight: '800px',
									overflowY: 'hidden',
									backgroundColor: '#fff',
								}}
							/>
						) : (
							<ApplyForZyd {...this.props}
                           returnList={this.returnList}
                           id={workId === '1549319936277479424' ? '1590627747913269248' : workId} />
              /* 姚鑫国说的 北电科违纪要用另外一个id发起  2022年11月10日 */
						)
					) : null}
				</div>
			</PageHeaderWrapper>
		);
	}
}