"use client";

import { useState, useEffect } from "react";
import { Button } from "@/components/ui/button";
import { FileIcon, Calendar, Eye, MapPin, Users, Clock, ThumbsUp, Languages, BarChart, Edit, Trash2 } from "lucide-react";
import { useToast } from "@/components/ui/use-toast";
import { useParams, useRouter } from "next/navigation";

// Define types for mission details
interface User {
  id: string;
  email: string;
}

interface Attachment {
  id: string;
  filename: string;
  filePath: string;
  fileType: string;
  fileSize: number;
  publicUrl: string;
  createdAt: string;
}

interface Mission {
  id: string;
  name: string;
  logo?: string | null;
  logoUrl?: string | null;
  oddScope: string[];
  niveau: string;
  missionType: string;
  projection: string;
  intention?: string;
  donneurDOrdre?: string;
  participation?: string;
  services?: string[];
  profils?: string[];
  attachments?: Attachment[];
  createdAt: string;
  creator: User;
  missionUsers: any[];
}

export default function MissionDetailPage() {
  const [mission, setMission] = useState<Mission | null>(null);
  const [loading, setLoading] = useState(true);
  const [deleting, setDeleting] = useState(false);
  const { toast } = useToast();
  const params = useParams();
  const router = useRouter();
  const missionId = params.missionId as string;

  // Fetch mission details
  useEffect(() => {
    const fetchMissionDetails = async () => {
      try {
        setLoading(true);
        const response = await fetch(`/api/missions/${missionId}`);
        if (!response.ok) {
          throw new Error('Failed to fetch mission details');
        }
        const data = await response.json();
        console.log("Mission details:", data);
        setMission(data);
      } catch (error) {
        console.error('Error fetching mission details:', error);
        toast({
          title: "Erreur",
          description: "Impossible de charger les détails de la mission",
          variant: "destructive",
        });
      } finally {
        setLoading(false);
      }
    };

    if (missionId) {
      fetchMissionDetails();
    }
  }, [missionId, toast]);

  // Helper function to format date
  const formatDate = (dateString: string) => {
    const date = new Date(dateString);
    return date.toLocaleDateString('fr-FR', {
      day: '2-digit',
      month: 'long',
      year: 'numeric'
    });
  };

  // Helper functions to get labels
  const getMissionTypeLabel = (type: string) => {
    switch(type) {
      case 'remote': return 'À distance';
      case 'onsite': return 'Sur site';
      case 'hybrid': return 'Hybride';
      default: return type;
    }
  };

  const getDurationLabel = (projection: string) => {
    switch(projection) {
      case 'short': return '< 1 mois';
      case 'medium': return '1-3 mois';
      case 'long': return '> 3 mois';
      default: return projection;
    }
  };

  const getNiveauLabel = (niveau: string) => {
    switch(niveau) {
      case 'a': return 'Apprentissage';
      case 'b': return 'Basique';
      case 'c': return 'Complexe';
      case 's': return 'Spécial';
      default: return niveau;
    }
  };

  // Function to get odd info
  const getODDInfo = (oddScope: string[]) => {
    const oddCode = oddScope && oddScope.length > 0 
      ? oddScope[0] 
      : null;
    
    // Extract number from odd code (e.g., "odd-3" -> "3")
    const oddNumber = oddCode ? oddCode.replace('odd-', '') : null;
    
    return {
      number: oddNumber,
      label: oddNumber ? `ODD ${oddNumber}` : "Non catégorisé",
      iconPath: oddNumber ? `/F SDG Icons 2019 WEB/F-WEB-Goal-${oddNumber.padStart(2, '0')}.png` : ""
    };
  };

  // Handle edit mission
  const handleEditMission = () => {
    router.push(`/missions/${missionId}/edit`);
  };
  
  // Handle delete mission
  const handleDeleteMission = async () => {
    if (!confirm("Êtes-vous sûr de vouloir supprimer cette mission ? Cette action est irréversible.")) {
      return;
    }
    
    try {
      setDeleting(true);
      const response = await fetch(`/api/missions/${missionId}`, {
        method: 'DELETE',
      });
      
      if (!response.ok) {
        throw new Error('Failed to delete mission');
      }
      
      toast({
        title: "Mission supprimée",
        description: "La mission a été supprimée avec succès",
      });
      
      // Redirect back to missions list
      router.push('/missions');
    } catch (error) {
      console.error('Error deleting mission:', error);
      toast({
        title: "Erreur",
        description: "Impossible de supprimer la mission",
        variant: "destructive",
      });
    } finally {
      setDeleting(false);
    }
  };

  // Loading state
  if (loading) {
    return (
      <div className="flex justify-center items-center min-h-screen bg-gray-50">
        <div className="animate-spin rounded-full h-12 w-12 border-t-2 border-b-2 border-blue-600"></div>
      </div>
    );
  }

  // Error state if mission not found
  if (!mission) {
    return (
      <div className="flex justify-center items-center min-h-screen bg-gray-50 px-4">
        <div className="text-center bg-white p-8 rounded-lg shadow-sm border border-gray-200 max-w-md">
          <h2 className="text-xl font-semibold text-gray-800 mb-2">Mission non trouvée</h2>
          <p className="text-gray-600 mb-6">Cette mission n'existe pas ou a été supprimée.</p>
          <Button 
            onClick={() => window.history.back()}
            className="bg-blue-600 hover:bg-blue-700 text-white"
          >
            Retour aux missions
          </Button>
        </div>
      </div>
    );
  }

  const oddInfo = getODDInfo(mission.oddScope);

  return (
    <div className="bg-gray-50 min-h-screen p-6">
      {/* Header */}
      <div className="bg-white rounded-lg shadow-sm border border-gray-100 mb-6 p-6">
        <div className="flex justify-between items-start">
          <div>
            <h1 className="text-2xl font-bold text-gray-900 mb-2">{mission.name}</h1>
            <div className="flex items-center text-gray-500 text-sm gap-4">
              <div className="flex items-center">
                <Calendar className="h-4 w-4 mr-1" />
                {formatDate(mission.createdAt)}
              </div>
            </div>
          </div>
          
          {/* Display logo instead of Participate button */}
          <div className="w-24 h-24 rounded-md overflow-hidden flex-shrink-0">
            {mission.logoUrl ? (
              <img 
                src={mission.logoUrl} 
                alt={mission.name}
                className="w-full h-full object-cover rounded-md"
                onError={(e) => {
                  console.error("Logo failed to load:", {
                    missionId: mission.id,
                    missionName: mission.name,
                    logoUrl: mission.logoUrl,
                    logoPath: mission.logo
                  });
                  // Show placeholder on error
                  (e.currentTarget as HTMLImageElement).style.display = 'none';
                  const parent = e.currentTarget.parentElement;
                  if (parent) {
                    parent.classList.add('bg-gray-100');
                    parent.classList.add('flex');
                    parent.classList.add('items-center');
                    parent.classList.add('justify-center');
                    parent.innerHTML = `<span class="text-2xl font-medium text-gray-400">${mission.name.slice(0, 2).toUpperCase()}</span>`;
                  }
                }}
              />
            ) : (
              <div className="w-full h-full bg-gray-100 flex items-center justify-center">
                <span className="text-2xl font-medium text-gray-400">{mission.name.slice(0, 2).toUpperCase()}</span>
              </div>
            )}
          </div>
        </div>
      </div>

      {/* Info Grid */}
      <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-6">
        <div className="bg-white rounded-lg p-4 flex items-center shadow-sm border border-gray-100">
          <div className="bg-amber-50 p-3 rounded-full mr-3">
            <MapPin className="h-5 w-5 text-amber-600" />
          </div>
          <div>
            <p className="text-sm text-gray-500 font-medium">Type de mission</p>
            <p className="text-gray-800 font-medium">{getMissionTypeLabel(mission.missionType)}</p>
          </div>
        </div>
        
        <div className="bg-white rounded-lg p-4 flex items-center shadow-sm border border-gray-100">
          <div className="bg-blue-50 p-3 rounded-full mr-3">
            <Users className="h-5 w-5 text-blue-600" />
          </div>
          <div>
            <p className="text-sm text-gray-500 font-medium">Donneur d'ordre</p>
            <p className="text-gray-800 font-medium">{mission.donneurDOrdre || "Non spécifié"}</p>
          </div>
        </div>
        
        <div className="bg-white rounded-lg p-4 flex items-center shadow-sm border border-gray-100">
          <div className="bg-green-50 p-3 rounded-full mr-3">
            <Clock className="h-5 w-5 text-green-600" />
          </div>
          <div>
            <p className="text-sm text-gray-500 font-medium">Durée</p>
            <p className="text-gray-800 font-medium">{getDurationLabel(mission.projection)}</p>
          </div>
        </div>
        
        <div className="bg-white rounded-lg p-4 flex items-center shadow-sm border border-gray-100">
          <div className="bg-purple-50 p-3 rounded-full mr-3">
            <ThumbsUp className="h-5 w-5 text-purple-600" />
          </div>
          <div>
            <p className="text-sm text-gray-500 font-medium">Niveau</p>
            <p className="text-gray-800 font-medium">{getNiveauLabel(mission.niveau)}</p>
          </div>
        </div>
        
        <div className="bg-white rounded-lg p-4 flex items-center shadow-sm border border-gray-100">
          <div className="bg-indigo-50 p-3 rounded-full mr-3">
            <Languages className="h-5 w-5 text-indigo-600" />
          </div>
          <div>
            <p className="text-sm text-gray-500 font-medium">Participation</p>
            <p className="text-gray-800 font-medium">{mission.participation || "Non spécifié"}</p>
          </div>
        </div>
        
        {oddInfo.number && (
          <div className="bg-white rounded-lg p-4 flex items-center shadow-sm border border-gray-100">
            <div className="bg-red-50 p-3 rounded-full mr-3 flex items-center justify-center">
              <img 
                src={oddInfo.iconPath} 
                alt={oddInfo.label}
                className="h-8 w-8" 
              />
            </div>
            <div>
              <p className="text-sm text-gray-500 font-medium">Objectif</p>
              <p className="text-gray-800 font-medium">Développement durable</p>
            </div>
          </div>
        )}
      </div>

      {/* Project Description */}
      <div className="bg-white rounded-lg shadow-sm border border-gray-100 mb-6 p-6">
        <h2 className="text-xl font-semibold text-gray-800 mb-4">Description de la mission</h2>
        <div className="text-gray-700 whitespace-pre-wrap">
          {mission.intention || "Aucune description disponible pour cette mission."}
        </div>
      </div>

      {/* Attachments Section */}
      {mission.attachments && mission.attachments.length > 0 && (
        <div className="bg-white rounded-lg shadow-sm border border-gray-100 mb-6 p-6">
          <h2 className="text-xl font-semibold text-gray-800 mb-4">Documents</h2>
          <div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4">
            {mission.attachments.map((attachment) => (
              <a 
                key={attachment.id} 
                href={attachment.publicUrl} 
                target="_blank" 
                rel="noopener noreferrer"
                className="bg-green-50 p-4 rounded-lg flex flex-col hover:bg-green-100 transition-colors"
              >
                <div className="text-green-700 mb-2">
                  <FileIcon className="h-10 w-10" />
                </div>
                <div>
                  <p className="font-medium text-gray-800 mb-1 truncate">{attachment.filename}</p>
                  <p className="text-sm text-gray-500">
                    {attachment.fileType.split('/')[1]?.toUpperCase() || 'Fichier'}
                  </p>
                </div>
              </a>
            ))}
          </div>
        </div>
      )}

      {/* Skills Required Section */}
      {mission.profils && mission.profils.length > 0 && (
        <div className="bg-white rounded-lg shadow-sm border border-gray-100 mb-6 p-6">
          <h2 className="text-xl font-semibold text-gray-800 mb-4">Profils recherchés</h2>
          <div className="flex flex-wrap gap-2">
            {mission.profils.map((profil, index) => (
              <span 
                key={index} 
                className="bg-red-50 text-red-800 px-3 py-2 rounded-full text-sm"
              >
                {profil}
              </span>
            ))}
          </div>
        </div>
      )}

      {/* Services Section */}
      {mission.services && mission.services.length > 0 && (
        <div className="bg-white rounded-lg shadow-sm border border-gray-100 mb-6 p-6">
          <h2 className="text-xl font-semibold text-gray-800 mb-4">Services</h2>
          <div className="flex flex-wrap gap-2">
            {mission.services.map((service, index) => (
              <span 
                key={index} 
                className="bg-blue-50 text-blue-800 px-3 py-2 rounded-full text-sm"
              >
                {service}
              </span>
            ))}
          </div>
        </div>
      )}

      {/* Action Buttons */}
      <div className="flex justify-end gap-4 mb-8">
        <Button 
          variant="outline"
          className="flex items-center gap-2 border-red-600 text-red-600 hover:bg-red-50 bg-white"
          onClick={handleDeleteMission}
          disabled={deleting}
        >
          {deleting ? (
            <div className="animate-spin rounded-full h-4 w-4 border-t-2 border-b-2 border-red-600"></div>
          ) : (
            <Trash2 className="h-4 w-4" />
          )}
          Supprimer
        </Button>
      </div>
    </div>
  );
} 