import {Modal, Card, Descriptions, List, Button, Divider, Form, Select, Input, DatePicker, message} from 'antd';
import React, { useEffect, useRef,useState } from 'react';
import { ProDescriptions} from '@ant-design/pro-components';
import {
  addCmsUserWorkExperiencesList,
  addCmsInterview,
} from '@/services/Management/list';
import dayjs from 'dayjs';

const { TextArea } = Input;
const { Option } = Select;

export type ListFormProps = {
  onClose: (flag?: boolean, formVals?: unknown) => void;
  open: boolean;
  values?: Partial<API.MobileUser.ListRow>;
  matching?: any;
};

const listEdit: React.FC<ListFormProps> = (props) => {

  const mapRef = useRef(null);
  const [loading, setLoading] = useState(false);
  const [contactInfoList, setContactInfoList] = useState<API.Management.WorkExperence[]>([]);

  // 面试邀约相关状态
  const [interviewForm] = Form.useForm();
  const [interviewMethod, setInterviewMethod] = useState<string>('online');
  const [submitting, setSubmitting] = useState<boolean>(false);

  useEffect(() => {
    if (props.open && props.values) {
      console.log(props.values);
      fetchResumeDetail();
      // 重置面试邀约表单
      interviewForm.resetFields();
      setInterviewMethod('online');
    }
  }, [props.values,props.open]);

  const fetchResumeDetail = async () => {
    if (!props.values?.userId) return;

    setLoading(true);
    try {
      const parm={userId:props.values.userId};
      const response = await addCmsUserWorkExperiencesList(parm);
      if (response.code === 200) {
        setContactInfoList(response.rows);
      }
    } catch (error) {
      console.error('获取经历详情失败:', error);
    } finally {
      setLoading(false);
    }
  };

  // 发送面试邀约
  const handleInterviewSubmit = async () => {
    try {
      const values = await interviewForm.validateFields();
      setSubmitting(true);

      const payload: API.Management.InterviewInvitation = {
        companyId: props.matching?.companyId,
        jobId: Number(props.matching?.jobId),
        userId: props.values?.userId,
        applyId: props.values?.applyId ? Number(props.values.applyId) : undefined,
        interviewTime: values.interviewTime
          ? dayjs(values.interviewTime).format('YYYY-MM-DD HH:mm:ss')
          : undefined,
        interviewMethod: values.interviewMethod,
        meetingLink: values.meetingLink,
        meetingPassword: values.meetingPassword,
        interviewLocation: values.interviewLocation,
        contactPhone: values.contactPhone,
        status: 'pending',
        remark: values.remark,
      };

      const response = await addCmsInterview(payload);
      if (response.code === 200) {
        message.success('面试邀约已发送');
        interviewForm.resetFields();
        setInterviewMethod('online');
      } else {
        message.error(response.msg || '发送失败');
      }
    } catch (error) {
      console.error('发送面试邀约失败:', error);
    } finally {
      setSubmitting(false);
    }
  };

  return (
    <Modal
      open={props.open}
      onCancel={() => props.onClose()}
      title="简历详情"
      width={800}
      footer={[
        <Button key="cancel" onClick={() => props.onClose()}>
          取消
        </Button>
      ]}
    >
      <ProDescriptions
        column={2}
        loading={loading}
      >
        {
          <ProDescriptions.Item
            dataIndex="contactInfoList"
            label=""
            span={2}
            render={() => {
              if (loading) return '加载中...';
              if (!Array.isArray(contactInfoList) || contactInfoList.length === 0) {
                return <span style={{ color: '#999' }}>暂无经历信息</span>;
              }
              return (
                <List
                  itemLayout="vertical"
                  dataSource={contactInfoList}
                  renderItem={(item, index) => (
                    <List.Item
                      style={{ marginBottom: 16 }}
                    >
                      <Card
                        title={`经历信息 #${index + 1}`}
                        bordered
                        style={{ width: '100%', boxShadow: '0 2px 8px rgba(0,0,0,0.1)' }}
                      >
                        <Descriptions column={2} size="small">
                          <Descriptions.Item label="公司名称">{item.companyName || '未填写'}</Descriptions.Item>
                          <Descriptions.Item label="职务">{item.position || '未填写'}</Descriptions.Item>
                          <Descriptions.Item label="开始时间">{item.startDate || '未填写'}</Descriptions.Item>
                          <Descriptions.Item label="截止时间">{item.endDate || '未填写'}</Descriptions.Item>
                          <Descriptions.Item label="描述" span={2}>
                            {item.description || '未填写'}
                          </Descriptions.Item>
                        </Descriptions>
                      </Card>
                    </List.Item>
                  )}
                />
              );
            }}
          />
          }
      </ProDescriptions>

      <Divider />
      <Card title="面试邀约" bordered style={{ marginTop: 16 }}>
        <Form
          form={interviewForm}
          layout="vertical"
          initialValues={{ interviewMethod: 'online' }}
        >
          <Form.Item
            name="interviewMethod"
            label="面试方式"
            rules={[{ required: true, message: '请选择面试方式' }]}
          >
            <Select
              placeholder="请选择面试方式"
              onChange={(value) => setInterviewMethod(value)}
            >
              <Option value="online">线上</Option>
              <Option value="offline">线下</Option>
            </Select>
          </Form.Item>

          <Form.Item
            name="interviewTime"
            label="面试时间"
            rules={[{ required: true, message: '请选择面试时间' }]}
          >
            <DatePicker
              showTime
              style={{ width: '100%' }}
              placeholder="请选择面试时间"
            />
          </Form.Item>

          {interviewMethod === 'online' && (
            <>
              <Form.Item
                name="meetingLink"
                label="腾讯会议链接"
                rules={[{ required: true, message: '请输入腾讯会议链接' }]}
              >
                <Input placeholder="请输入腾讯会议链接" />
              </Form.Item>
              <Form.Item
                name="meetingPassword"
                label="会议密码"
                rules={[{ required: true, message: '请输入会议密码' }]}
              >
                <Input placeholder="请输入会议密码" />
              </Form.Item>
            </>
          )}

          {interviewMethod === 'offline' && (
            <Form.Item
              name="interviewLocation"
              label="面试地点"
              rules={[{ required: true, message: '请输入面试地点' }]}
            >
              <Input placeholder="请输入面试地点" />
            </Form.Item>
          )}

          <Form.Item
            name="remark"
            label="备注"
          >
            <TextArea rows={3} placeholder="选填，如有其他注意事项可在此说明" />
          </Form.Item>

          <Form.Item
            name="contactPhone"
            label="面试官联系方式"
            rules={[{ required: true, message: '请输入面试官联系方式' }]}
          >
            <Input placeholder="请输入手机号或微信等联系方式" />
          </Form.Item>

          <Form.Item>
            <Button type="primary" loading={submitting} onClick={handleInterviewSubmit}>
              发送面试邀约
            </Button>
          </Form.Item>
        </Form>
      </Card>
    </Modal>
  );
};

export default listEdit;
