import React, { useState, useEffect } from 'react';
import { Button, Card, Descriptions, Alert, App as AntdApp } from 'antd';
import { useGet, usePost } from '../../hooks/useApi';

interface TransferStatus {
  id: number;
  year: number;
  completed_at: string;
  status: string;
  error_message?: string;
}

const YearEndManagement: React.FC = () => {
  const [loading, setLoading] = useState(false);
  const [lastTransfer, setLastTransfer] = useState<TransferStatus | null>(null);
  const { message } = AntdApp.useApp();
  // Используем `useGet` для получения статуса
  const { data, error, execute: fetchStatus } = useGet<TransferStatus>('/year-end/status');

  // Используем `usePost` для выполнения переноса
  const { execute: transferData } = usePost('/year-end/transfer');

  // Обновляем состояние, когда `data` загружено
  useEffect(() => {
    if (data) setLastTransfer(data);
  }, [data]);

  // Обработчик клика на кнопку переноса
  const handleTransfer = async () => {
    const currentYear = new Date().getFullYear();
    const confirm = window.confirm(
      `Вы уверены, что хотите выполнить перенос остатков за ${currentYear} год?`
    );

    if (!confirm) return;

    setLoading(true);
    try {
      await transferData(); // Выполняем POST-запрос
      message.success('Перенос остатков успешно выполнен');
      fetchStatus(); // Обновляем статус
    } catch {
      message.error('Ошибка при переносе остатков');
    } finally {
      setLoading(false);
    }
  };

  return (
    <Card title="Управление переносом остатков">
      <Alert
        message="Внимание"
        description="Перенос остатков создаст новые категории для следующего года и перенесет все товары с ненулевым количеством."
        type="warning"
        showIcon
        style={{ marginBottom: 16 }}
      />

      {error && <Alert message="Ошибка" description={error} type="error" showIcon />}

      {lastTransfer && (
        <Descriptions title="Последний перенос" bordered style={{ marginBottom: 16 }}>
          <Descriptions.Item label="Год">{lastTransfer.year}</Descriptions.Item>
          <Descriptions.Item label="Дата выполнения">
            {new Date(lastTransfer.completed_at).toLocaleString()}
          </Descriptions.Item>
          <Descriptions.Item label="Статус">{lastTransfer.status}</Descriptions.Item>
          {lastTransfer.error_message && (
            <Descriptions.Item label="Ошибка">
              {lastTransfer.error_message}
            </Descriptions.Item>
          )}
        </Descriptions>
      )}

      <Button
        type="primary"
        onClick={handleTransfer}
        loading={loading}
        disabled={loading}
      >
        Выполнить перенос остатков
      </Button>
    </Card>
  );
};

export default YearEndManagement;
