import { useCallback } from 'react';
import { router } from '@inertiajs/react';
import Swal from 'sweetalert2';

/**
 * Hook para manejar documentos tramitados (descarga y eliminación)
 * - descargarDocumento(pathOrId): abre una nueva pestaña para descargar el archivo.
 * - borrarDocumento(documentoId): elimina un documento por su ID.
 *
 * Se espera que el backend exponga las rutas:
 * - `documentos.descargar` registrada como `/documentos/download/{path}`
 * - `documentos.borrar` registrada como `/documentos/{documentoId}` (DELETE)
 */
export const useDocumentosTramitados = (showLoading?: () => void, hideLoading?: () => void) => {
  const descargarDocumento = useCallback((pathOrId?: string) => {
    if (!pathOrId) return;

    const isPath = pathOrId.includes('/');

    // Intentar usar el helper `route()` si está disponible en el global (Inertia/Laravel Ziggy)
    try {
      if (isPath) {
        // Si route está disponible, pasar el path directamente; si no, construir la URL manualmente
        const url = (window as any).route ? (window as any).route('documentos.descargar', pathOrId) : `/documentos/download/${encodeURI(pathOrId)}`;
        window.open(url, '_blank');
        return;
      }

      // Si no es un path, asumimos que es un id o nombre y abrimos por id
      const urlById = (window as any).route ? (window as any).route('documentos.descargar', pathOrId) : `/documentos/download/${encodeURI(pathOrId)}`;
      window.open(urlById, '_blank');
    } catch (e) {
      // Fallback seguro
      const safe = encodeURI(pathOrId);
      window.open(`/documentos/download/${safe}`, '_blank');
    }
  }, []);

  const borrarDocumento = useCallback((documentoId: number | string, nombreArchivo?: string) => {
    if (!documentoId) return;

    Swal.fire({
      title: '¿Estás seguro?',
      text: nombreArchivo 
        ? `¿Deseas eliminar el documento "${nombreArchivo}"? Esta acción no se puede deshacer.`
        : '¿Deseas eliminar este documento? Esta acción no se puede deshacer.',
      icon: 'warning',
      showCancelButton: true,
      confirmButtonColor: '#d33',
      cancelButtonColor: '#3085d6',
      confirmButtonText: 'Sí, eliminar',
      cancelButtonText: 'Cancelar'
    }).then((result) => {
      if (result.isConfirmed) {
        // Mostrar loading al iniciar
        if (showLoading) showLoading();

        // Usar Inertia router para hacer la petición DELETE
        router.delete(
          (window as any).route 
            ? (window as any).route('documentos.borrar', documentoId)
            : `/documentos/${documentoId}`,
          {
            preserveScroll: true,
            preserveState: true,
            onSuccess: () => {
              // Ocultar loading al finalizar con éxito
              if (hideLoading) hideLoading();
              
              Swal.fire({
                title: '¡Eliminado!',
                text: 'El documento ha sido eliminado correctamente.',
                icon: 'success',
                timer: 2000,
                showConfirmButton: false
              });
            },
            onError: (errors) => {
              // Ocultar loading al finalizar con error
              if (hideLoading) hideLoading();
              
              console.error('Error al eliminar documento:', errors);
              Swal.fire({
                title: 'Error',
                text: 'No se pudo eliminar el documento. Por favor, intenta de nuevo.',
                icon: 'error',
                confirmButtonText: 'Aceptar'
              });
            },
            onFinish: () => {
              // Asegurar que se oculte el loading en cualquier caso
              if (hideLoading) hideLoading();
            }
          }
        );
      }
    });
  }, [showLoading, hideLoading]);

  return {
    descargarDocumento,
    borrarDocumento,
  } as const;
};

export default useDocumentosTramitados;
