'use client';
import React, { useState, useEffect } from 'react';
import { useSearchParams, useRouter } from 'next/navigation';
import ValidateSubscription from '@/components/Inscription/ValidateSubscription';
import { editRegisterForm } from '@/app/actions/subscriptionAction';
import { fetchClasses } from '@/app/actions/schoolAction';
import { useCsrfToken } from '@/context/CsrfContext';
import logger from '@/utils/logger';
import Loader from '@/components/Loader';
import { useEstablishment } from '@/context/EstablishmentContext';
import { FE_ADMIN_SUBSCRIPTIONS_URL } from '@/utils/Url';

export default function Page() {
  const searchParams = useSearchParams();
  const router = useRouter();
  const [isLoading, setIsLoading] = useState(false);

  // Récupérer les paramètres de la requête
  const studentId = searchParams.get('studentId');
  const firstName = searchParams.get('firstName');
  const lastName = searchParams.get('lastName');
  const level = searchParams.get('level');
  const sepa_file =
    searchParams.get('sepa_file') === 'null'
      ? null
      : searchParams.get('sepa_file');
  const student_file = searchParams.get('student_file');

  const [classes, setClasses] = useState([]);

  const csrfToken = useCsrfToken();
  const { selectedEstablishmentId } = useEstablishment();

  const requestErrorHandler = (err) => {
    logger.error('Error fetching data:', err);
  };

  useEffect(() => {
    if (selectedEstablishmentId) {
      setIsLoading(true);
      fetchClasses(selectedEstablishmentId)
        .then((classesData) => {
          logger.debug('Classes récupérées :', classesData);

          // Filtrer les classes par niveau
          const filteredClasses = classesData.filter(
            (classe) => classe.levels.includes(parseInt(level, 10)) // Vérifier si le niveau de l'étudiant est dans les niveaux de la classe
          );

          setClasses(filteredClasses); // Mettre à jour les classes filtrées
          setIsLoading(false);
        })
        .catch(requestErrorHandler);
    }
  }, [selectedEstablishmentId]);

  const handleAcceptRF = (data) => {
    const formData = new FormData();
    formData.append('data', JSON.stringify(data));

    setIsLoading(true);
    // Appeler l'API pour mettre à jour le RF
    editRegisterForm(studentId, formData, csrfToken)
      .then((response) => {
        logger.debug('RF mis à jour avec succès:', response);
        router.push(FE_ADMIN_SUBSCRIPTIONS_URL);
        setIsLoading(false);
        // Logique supplémentaire après la mise à jour (par exemple, redirection ou notification)
      })
      .catch((error) => {
        setIsLoading(false);
        logger.error('Erreur lors de la mise à jour du RF:', error);
      });
  };

  if (isLoading) {
    return <Loader />;
  }

  return (
    <ValidateSubscription
      studentId={studentId}
      firstName={firstName}
      lastName={lastName}
      sepa_file={sepa_file}
      student_file={student_file}
      onAccept={handleAcceptRF}
      classes={classes}
    />
  );
}
