import React from 'react';
import FeesSection from '@/components/Structure/Tarification/FeesSection';
import DiscountsSection from '@/components/Structure/Tarification/DiscountsSection';
import PaymentPlanSelector from '@/components/PaymentPlanSelector';
import PaymentModeSelector from '@/components/PaymentModeSelector';
import {
  BE_SCHOOL_FEES_URL,
  BE_SCHOOL_DISCOUNTS_URL,
  BE_SCHOOL_PAYMENT_PLANS_URL,
  BE_SCHOOL_PAYMENT_MODES_URL,
} from '@/utils/Url';

const FeesManagement = ({
  registrationDiscounts,
  setRegistrationDiscounts,
  tuitionDiscounts,
  setTuitionDiscounts,
  registrationFees,
  setRegistrationFees,
  tuitionFees,
  setTuitionFees,
  registrationPaymentPlans,
  setRegistrationPaymentPlans,
  tuitionPaymentPlans,
  setTuitionPaymentPlans,
  registrationPaymentModes,
  setRegistrationPaymentModes,
  tuitionPaymentModes,
  setTuitionPaymentModes,
  handleCreate,
  handleEdit,
  handleDelete,
}) => {
  const handleDiscountDelete = (id, type) => {
    if (type === 0) {
      setRegistrationFees((prevFees) =>
        prevFees.map((fee) => ({
          ...fee,
          discounts: fee.discounts.filter((discountId) => discountId !== id),
        }))
      );
    } else {
      setTuitionFees((prevFees) =>
        prevFees.map((fee) => ({
          ...fee,
          discounts: fee.discounts.filter((discountId) => discountId !== id),
        }))
      );
    }
  };

  return (
    <div className="w-full mx-auto mt-6">
      <div className="w-4/5 mx-auto flex items-center mt-8">
        <hr className="flex-grow border-t-2 border-gray-300" />
        <span className="mx-4 text-gray-600 font-semibold">
          Frais d'inscription
        </span>
        <hr className="flex-grow border-t-2 border-gray-300" />
      </div>

      <div className="mt-8 w-4/5">
        <FeesSection
          fees={registrationFees}
          setFees={setRegistrationFees}
          discounts={registrationDiscounts}
          handleCreate={(newData) =>
            handleCreate(`${BE_SCHOOL_FEES_URL}`, newData, setRegistrationFees)
          }
          handleEdit={(id, updatedData) =>
            handleEdit(
              `${BE_SCHOOL_FEES_URL}`,
              id,
              updatedData,
              setRegistrationFees
            )
          }
          handleDelete={(id) =>
            handleDelete(`${BE_SCHOOL_FEES_URL}`, id, setRegistrationFees)
          }
          type={0}
        />
      </div>
      <div className="mt-12 w-4/5">
        <DiscountsSection
          discounts={registrationDiscounts}
          setDiscounts={setRegistrationDiscounts}
          handleCreate={(newData) =>
            handleCreate(
              `${BE_SCHOOL_DISCOUNTS_URL}`,
              newData,
              setRegistrationDiscounts
            )
          }
          handleEdit={(id, updatedData) =>
            handleEdit(
              `${BE_SCHOOL_DISCOUNTS_URL}`,
              id,
              updatedData,
              setRegistrationDiscounts
            )
          }
          handleDelete={(id) =>
            handleDelete(
              `${BE_SCHOOL_DISCOUNTS_URL}`,
              id,
              setRegistrationDiscounts
            )
          }
          onDiscountDelete={(id) => handleDiscountDelete(id, 0)}
          type={0}
        />
      </div>
      <div className="mt-12 grid grid-cols-1 md:grid-cols-2 gap-6">
        <div className="col-span-1 mt-4">
          <PaymentPlanSelector
            paymentPlans={registrationPaymentPlans}
            setPaymentPlans={setRegistrationPaymentPlans}
            handleEdit={(id, updatedData) =>
              handleEdit(
                `${BE_SCHOOL_PAYMENT_PLANS_URL}`,
                id,
                updatedData,
                setRegistrationPaymentPlans
              )
            }
            type={0}
          />
        </div>
        <div className="col-span-1 mt-4">
          <PaymentModeSelector
            paymentModes={registrationPaymentModes}
            setPaymentModes={setRegistrationPaymentModes}
            handleEdit={(id, updatedData) =>
              handleEdit(
                `${BE_SCHOOL_PAYMENT_MODES_URL}`,
                id,
                updatedData,
                setRegistrationPaymentModes
              )
            }
            type={0}
          />
        </div>
      </div>

      <div className="w-4/5 mx-auto flex items-center mt-16">
        <hr className="flex-grow border-t-2 border-gray-300" />
        <span className="mx-4 text-gray-600 font-semibold">
          Frais de scolarité
        </span>
        <hr className="flex-grow border-t-2 border-gray-300" />
      </div>

      <div className="mt-8 w-4/5">
        <FeesSection
          fees={tuitionFees}
          setFees={setTuitionFees}
          discounts={tuitionDiscounts}
          handleCreate={(newData) =>
            handleCreate(`${BE_SCHOOL_FEES_URL}`, newData, setTuitionFees)
          }
          handleEdit={(id, updatedData) =>
            handleEdit(`${BE_SCHOOL_FEES_URL}`, id, updatedData, setTuitionFees)
          }
          handleDelete={(id) =>
            handleDelete(`${BE_SCHOOL_FEES_URL}`, id, setTuitionFees)
          }
          type={1}
        />
      </div>
      <div className="mt-12 w-4/5">
        <DiscountsSection
          discounts={tuitionDiscounts}
          setDiscounts={setTuitionDiscounts}
          handleCreate={(newData) =>
            handleCreate(
              `${BE_SCHOOL_DISCOUNTS_URL}`,
              newData,
              setTuitionDiscounts
            )
          }
          handleEdit={(id, updatedData) =>
            handleEdit(
              `${BE_SCHOOL_DISCOUNTS_URL}`,
              id,
              updatedData,
              setTuitionDiscounts
            )
          }
          handleDelete={(id) =>
            handleDelete(`${BE_SCHOOL_DISCOUNTS_URL}`, id, setTuitionDiscounts)
          }
          onDiscountDelete={(id) => handleDiscountDelete(id, 1)}
          type={1}
        />
      </div>
      <div className="mt-12 grid grid-cols-1 md:grid-cols-2 gap-6">
        <div className="col-span-1 mt-4">
          <PaymentPlanSelector
            paymentPlans={tuitionPaymentPlans}
            setPaymentPlans={setTuitionPaymentPlans}
            handleEdit={(id, updatedData) =>
              handleEdit(
                `${BE_SCHOOL_PAYMENT_PLANS_URL}`,
                id,
                updatedData,
                setRegistrationPaymentPlans
              )
            }
            type={1}
          />
        </div>
        <div className="col-span-1 mt-4">
          <PaymentModeSelector
            paymentModes={tuitionPaymentModes}
            setPaymentModes={setTuitionPaymentModes}
            handleEdit={(id, updatedData) =>
              handleEdit(
                `${BE_SCHOOL_PAYMENT_MODES_URL}`,
                id,
                updatedData,
                setTuitionPaymentModes
              )
            }
            type={1}
          />
        </div>
      </div>
    </div>
  );
};

export default FeesManagement;
