import React from 'react';
import { BaseDeleteModal } from '../../ui';
import { Equipment } from '../../../api/types/equipment';
import { useCurrentTenant } from '../../../stores/tenant.store';
import { useEquipmentDeletionSummary } from '../../../api/hooks/equipment';

interface DeleteEquipmentModalProps {
  isOpen: boolean;
  onClose: () => void;
  equipment: Equipment;
  onSoftDelete: (equipmentId: string) => Promise<void>;
  onHardDelete: (equipmentId: string) => Promise<void>;
  isLoading?: boolean;
}

/**
 * Modal for equipment deletion with soft/hard delete options
 * - Soft delete: Deactivate equipment (reversible)
 * - Hard delete: Permanent deletion with dependency checking
 */
export const DeleteEquipmentModal: React.FC<DeleteEquipmentModalProps> = ({
  isOpen,
  onClose,
  equipment,
  onSoftDelete,
  onHardDelete,
  isLoading = false,
}) => {
  const currentTenant = useCurrentTenant();

  // Fetch deletion summary for dependency checking
  const { data: deletionSummary, isLoading: summaryLoading } = useEquipmentDeletionSummary(
    currentTenant?.id || '',
    equipment?.id || '',
    {
      enabled: isOpen && !!equipment,
    }
  );

  if (!equipment) return null;

  // Build dependency check warnings
  const dependencyWarnings: string[] = [];
  if (deletionSummary) {
    if (deletionSummary.production_batches_count > 0) {
      dependencyWarnings.push(
        `${deletionSummary.production_batches_count} lote(s) de producción utilizan este equipo`
      );
    }
    if (deletionSummary.maintenance_records_count > 0) {
      dependencyWarnings.push(
        `${deletionSummary.maintenance_records_count} registro(s) de mantenimiento`
      );
    }
    if (deletionSummary.temperature_logs_count > 0) {
      dependencyWarnings.push(
        `${deletionSummary.temperature_logs_count} registro(s) de temperatura`
      );
    }
    if (deletionSummary.warnings && deletionSummary.warnings.length > 0) {
      dependencyWarnings.push(...deletionSummary.warnings);
    }
  }

  // Build hard delete warning items
  const hardDeleteItems = [
    'El equipo y toda su información',
    'Todo el historial de mantenimiento',
    'Las alertas relacionadas',
  ];

  if (deletionSummary) {
    if (deletionSummary.production_batches_count > 0) {
      hardDeleteItems.push(
        `Referencias en ${deletionSummary.production_batches_count} lote(s) de producción`
      );
    }
  }

  // Get equipment type label
  const getEquipmentTypeLabel = (type: string): string => {
    const typeLabels: Record<string, string> = {
      oven: 'Horno',
      mixer: 'Batidora',
      proofer: 'Fermentadora',
      freezer: 'Congelador',
      packaging: 'Empaquetado',
      other: 'Otro',
    };
    return typeLabels[type] || type;
  };

  return (
    <BaseDeleteModal
      isOpen={isOpen}
      onClose={onClose}
      entity={equipment}
      onSoftDelete={onSoftDelete}
      onHardDelete={onHardDelete}
      isLoading={isLoading}
      title="Eliminar Equipo"
      getEntityId={(eq) => eq.id}
      getEntityDisplay={(eq) => ({
        primaryText: eq.name,
        secondaryText: `Tipo: ${getEquipmentTypeLabel(eq.type)} • Ubicación: ${eq.location || 'No especificada'}`,
      })}
      softDeleteOption={{
        title: 'Desactivar (Recomendado)',
        description: 'El equipo se marca como inactivo pero conserva todo su historial de mantenimiento. Ideal para equipos temporalmente fuera de servicio.',
        benefits: '✓ Reversible • ✓ Conserva historial • ✓ Conserva alertas',
      }}
      hardDeleteOption={{
        title: 'Eliminar Permanentemente',
        description: 'Elimina completamente el equipo y todos sus datos asociados. Use solo para datos erróneos o pruebas.',
        benefits: '⚠️ No reversible • ⚠️ Elimina historial • ⚠️ Elimina todos los datos',
        enabled: true,
      }}
      softDeleteWarning={{
        title: 'ℹ️ Esta acción desactivará el equipo:',
        items: [
          'El equipo se marcará como inactivo',
          'No aparecerá en listas activas',
          'Se conserva todo el historial de mantenimiento',
          'Se puede reactivar posteriormente',
        ],
      }}
      hardDeleteWarning={{
        title: '⚠️ Esta acción eliminará permanentemente:',
        items: hardDeleteItems,
        footer: 'Esta acción NO se puede deshacer',
      }}
      dependencyCheck={{
        isLoading: summaryLoading,
        canDelete: deletionSummary?.can_delete !== false,
        warnings: dependencyWarnings,
      }}
      requireConfirmText={true}
      confirmText="ELIMINAR"
      showSuccessScreen={true}
      successTitle="Equipo Procesado"
      getSuccessMessage={(eq, mode) =>
        mode === 'hard'
          ? `${eq.name} ha sido eliminado permanentemente`
          : `${eq.name} ha sido desactivado`
      }
      autoCloseDelay={1500}
    />
  );
};

export default DeleteEquipmentModal;
