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,
}) => {
// Liste unique triée par type puis par nom
const allFees = [...(registrationFees ?? []), ...(tuitionFees ?? [])].sort(
(a, b) => a.type - b.type || (a.name ?? '').localeCompare(b.name ?? '')
);
const setAllFees = (updater) => {
const next = typeof updater === 'function' ? updater(allFees) : updater;
setRegistrationFees(next.filter((f) => f.type === 0));
setTuitionFees(next.filter((f) => f.type === 1));
};
const allDiscounts = [
...(registrationDiscounts ?? []),
...(tuitionDiscounts ?? []),
].sort(
(a, b) => a.type - b.type || (a.name ?? '').localeCompare(b.name ?? '')
);
const setAllDiscounts = (updater) => {
const next =
typeof updater === 'function' ? updater(allDiscounts) : updater;
setRegistrationDiscounts(next.filter((d) => d.type === 0));
setTuitionDiscounts(next.filter((d) => d.type === 1));
};
const allPaymentPlans = [
...(registrationPaymentPlans ?? []),
...(tuitionPaymentPlans ?? []),
];
const allPaymentModes = [
...(registrationPaymentModes ?? []),
...(tuitionPaymentModes ?? []),
];
return (
{/* Tableau unique des frais */}
{
const setter =
feeData.type === 0 ? setRegistrationFees : setTuitionFees;
return handleCreate(BE_SCHOOL_FEES_URL, feeData, setter);
}}
handleEdit={(id, data) => {
const fee = allFees.find((f) => f.id === id);
const feeType = data.type ?? fee?.type;
const setter = feeType === 0 ? setRegistrationFees : setTuitionFees;
return handleEdit(BE_SCHOOL_FEES_URL, id, data, setter);
}}
handleDelete={(id) => {
const fee = allFees.find((f) => f.id === id);
const setter = fee?.type === 0 ? setRegistrationFees : setTuitionFees;
return handleDelete(BE_SCHOOL_FEES_URL, id, setter);
}}
/>
{/* Tableau unique des réductions */}
{
const setter =
data.type === 0 ? setRegistrationDiscounts : setTuitionDiscounts;
return handleCreate(BE_SCHOOL_DISCOUNTS_URL, data, setter);
}}
handleEdit={(id, data) => {
const discount = allDiscounts.find((d) => d.id === id);
const discountType = data.type ?? discount?.type;
const setter =
discountType === 0 ? setRegistrationDiscounts : setTuitionDiscounts;
return handleEdit(BE_SCHOOL_DISCOUNTS_URL, id, data, setter);
}}
handleDelete={(id) => {
const discount = allDiscounts.find((d) => d.id === id);
const setter =
discount?.type === 0
? setRegistrationDiscounts
: setTuitionDiscounts;
return handleDelete(BE_SCHOOL_DISCOUNTS_URL, id, setter);
}}
onDiscountDelete={(id) => {
// Retire la réduction des frais concernés
setAllFees((prevFees) =>
prevFees.map((fee) => ({
...fee,
discounts: fee.discounts.filter((dId) => dId !== id),
}))
);
}}
/>
{/* Plans et modes de paiement communs */}
{
const setter =
data.type === 0
? setRegistrationPaymentPlans
: setTuitionPaymentPlans;
return handleCreate(BE_SCHOOL_PAYMENT_PLANS_URL, data, setter);
}}
handleDelete={(id) => {
const plan = allPaymentPlans.find((p) => p.id === id);
const setter =
plan?.type === 0
? setRegistrationPaymentPlans
: setTuitionPaymentPlans;
return handleDelete(BE_SCHOOL_PAYMENT_PLANS_URL, id, setter);
}}
/>
{
const setter =
data.type === 0
? setRegistrationPaymentModes
: setTuitionPaymentModes;
return handleCreate(BE_SCHOOL_PAYMENT_MODES_URL, data, setter);
}}
handleDelete={(id) => {
const mode = allPaymentModes.find((m) => m.id === id);
const setter =
mode?.type === 0
? setRegistrationPaymentModes
: setTuitionPaymentModes;
return handleDelete(BE_SCHOOL_PAYMENT_MODES_URL, id, setter);
}}
/>
);
};
export default FeesManagement;