import { Form, Input, Button, Select, DatePicker, Upload, message } from 'antd';
import { UploadOutlined } from '@ant-design/icons';
import { useState } from 'react';
import type { UploadFile } from 'antd/es/upload/interface';
import dayjs from 'dayjs';

const { Option } = Select;

interface Props {
  formData: any;
  updateFormData: (data: any) => void;
  onNext: () => void;
  onPrev: () => void;
  addDebugEvent?: (type: string, status: string, message: string, data?: any) => void;
}

// Типы страховых случаев из erv_ticket
const EVENT_TYPES = [
  { value: 'delay_flight', label: 'Задержка авиарейса (более 3 часов)' },
  { value: 'cancel_flight', label: 'Отмена авиарейса' },
  { value: 'miss_connection', label: 'Пропуск (задержка прибытия) стыковочного рейса (авиа/жд/паром и тд)' },
  { value: 'emergency_landing', label: 'Посадка воздушного судна на запасной аэродром' },
  { value: 'delay_train', label: 'Задержка отправки поезда' },
  { value: 'cancel_train', label: 'Отмена поезда' },
  { value: 'delay_ferry', label: 'Задержка/отмена отправки парома/круизного судна' },
];

export default function Step2Details({ formData, updateFormData, onNext, onPrev, addDebugEvent }: Props) {
  const [form] = Form.useForm();
  const [fileList, setFileList] = useState<UploadFile[]>([]);
  const [uploading, setUploading] = useState(false);

  const handleNext = async () => {
    try {
      const values = await form.validateFields();
      
      // Если есть файлы - загружаем
      if (fileList.length > 0) {
        setUploading(true);
        
        addDebugEvent?.('upload', 'pending', `📤 Загружаю ${fileList.length} документ(ов) в S3...`, {
          count: fileList.length
        });

        const formData = new FormData();
        fileList.forEach((file: any) => {
          if (file.originFileObj) {
            formData.append('files', file.originFileObj);
          }
        });

        const uploadResponse = await fetch('http://147.45.146.17:8100/api/v1/upload/files?folder=documents', {
          method: 'POST',
          body: formData,
        });

        const uploadResult = await uploadResponse.json();

        if (uploadResult.success) {
          addDebugEvent?.('upload', 'success', `✅ Документы загружены: ${uploadResult.uploaded_count}/${uploadResult.total_count}`, {
            files: uploadResult.files
          });

          updateFormData({ 
            ...values, 
            uploadedFiles: uploadResult.files 
          });
        } else {
          message.error('Ошибка загрузки документов');
          setUploading(false);
          return;
        }

        setUploading(false);
      } else {
        updateFormData(values);
      }
      
      onNext();
    } catch (error) {
      message.error('Заполните все обязательные поля');
      setUploading(false);
    }
  };

  const handleUploadChange = ({ fileList: newFileList }: any) => {
    setFileList(newFileList);
  };

  return (
    <Form
      form={form}
      layout="vertical"
      initialValues={formData}
      style={{ marginTop: 24 }}
    >
      {/* Индикатор что полис найден */}
      {formData.voucher && (
        <div style={{
          padding: 12,
          background: '#f6ffed',
          border: '1px solid #b7eb8f',
          borderRadius: 8,
          marginBottom: 24,
          color: '#52c41a',
          fontWeight: 500
        }}>
          ✅ Полис найден
        </div>
      )}

      <Form.Item
        label="Выберите тип события"
        name="eventType"
        rules={[{ required: true, message: 'Выберите тип события' }]}
      >
        <Select 
          placeholder="Выберите тип события" 
          size="large"
        >
          {EVENT_TYPES.map(type => (
            <Option key={type.value} value={type.value}>
              {type.label}
            </Option>
          ))}
        </Select>
      </Form.Item>

      <Form.Item
        label="Дата наступления страхового случая"
        name="incidentDate"
        rules={[{ required: true, message: 'Укажите дату' }]}
      >
        <DatePicker 
          placeholder="Выберите дату"
          size="large"
          style={{ width: '100%' }}
          format="DD.MM.YYYY"
          disabledDate={(current) => current && current > dayjs().endOf('day')}
        />
      </Form.Item>

      <Form.Item
        label="Номер рейса/поезда/парома"
        name="transportNumber"
        rules={[{ required: true, message: 'Введите номер' }]}
      >
        <Input 
          placeholder="Введите номер" 
          size="large"
        />
      </Form.Item>

      <Form.Item
        label="Подтверждающие документы"
        name="documents"
        tooltip="Посадочный талон, билет, справка о задержке и т.д."
      >
        <Upload
          listType="picture"
          fileList={fileList}
          onChange={handleUploadChange}
          beforeUpload={(file) => {
            const isLt15M = file.size / 1024 / 1024 < 15;
            if (!isLt15M) {
              message.error(`${file.name}: файл больше 15MB`);
              return Upload.LIST_IGNORE;
            }
            if (fileList.length >= 10) {
              message.error('Максимум 10 файлов');
              return Upload.LIST_IGNORE;
            }
            return false;
          }}
          accept="image/*,.pdf,.heic,.heif"
          multiple
          maxCount={10}
          showUploadList={{
            showPreviewIcon: true,
            showRemoveIcon: true,
          }}
        >
          <Button icon={<UploadOutlined />} size="large" block disabled={fileList.length >= 10}>
            Загрузить файлы (до 10 шт, макс 15MB каждый)
          </Button>
        </Upload>
        <div style={{ marginTop: 8, fontSize: 12, color: '#999' }}>
          Загружено: {fileList.length}/10 файлов
        </div>
      </Form.Item>

      <Form.Item>
        <div style={{ display: 'flex', gap: 8, marginTop: 32 }}>
          <Button onClick={onPrev} size="large">Назад</Button>
          <Button
            type="primary"
            onClick={handleNext}
            loading={uploading}
            style={{ flex: 1 }}
            size="large"
          >
            {uploading ? 'Загрузка документов...' : 'Далее'}
          </Button>
        </div>
      </Form.Item>
    </Form>
  );
}
