import React, { useState } from 'react'; import { SchoolData, Course } from '../types'; import { useDialog } from '../DialogContext'; import { Plus, Edit2, Trash2, X, Clock, DollarSign, BookText, Info, AlertTriangle } from 'lucide-react'; interface CoursesProps { data: SchoolData; updateData: (newData: Partial) => void; } const Courses: React.FC = ({ data, updateData }) => { const { showAlert, showConfirm } = useDialog(); const [isModalOpen, setIsModalOpen] = useState(false); const [isClosing, setIsClosing] = useState(false); const [editingCourse, setEditingCourse] = useState(null); const [formData, setFormData] = useState>({ name: '', duration: '', durationMonths: 12, // Default value registrationFee: 0, monthlyFee: 0, description: '', finePercentage: 0, interestPercentage: 0 }); const extractMonths = (text: string): number => { const match = text.match(/\d+/); return match ? parseInt(match[0]) : 12; }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!formData.name || !formData.duration || formData.monthlyFee <= 0) { showAlert('Atenção', '⚠️ Por favor, preencha o nome, duração e valor da mensalidade.', 'warning'); return; } // Auto-calculate months from text if possible, otherwise keep default or existing const calculatedMonths = extractMonths(formData.duration); const finalData = { ...formData, durationMonths: calculatedMonths }; if (editingCourse) { const updated = data.courses.map(c => c.id === editingCourse.id ? { ...finalData, id: c.id } : c); updateData({ courses: updated }); } else { const newCourse: Course = { ...finalData, id: crypto.randomUUID() }; updateData({ courses: [...data.courses, newCourse] }); } closeModal(); }; const closeModal = () => { setIsClosing(true); setTimeout(() => { setIsModalOpen(false); setIsClosing(false); setEditingCourse(null); setFormData({ name: '', duration: '', durationMonths: 12, registrationFee: 0, monthlyFee: 0, description: '', finePercentage: 0, interestPercentage: 0 }); }, 400); }; const handleEdit = (course: Course) => { setEditingCourse(course); setFormData({ name: course.name || '', duration: course.duration || '', durationMonths: course.durationMonths || 12, registrationFee: course.registrationFee || 0, monthlyFee: course.monthlyFee || 0, description: course.description || '', finePercentage: course.finePercentage || 0, interestPercentage: course.interestPercentage || 0 }); setIsModalOpen(true); }; const checkAndDelete = (id: string) => { const hasClasses = data.classes.some(c => c.courseId === id); if (hasClasses) { showAlert('Atenção', 'Não é possível excluir um curso que possui turmas vinculadas.', 'warning'); return; } showConfirm( 'Excluir Curso', 'Tem certeza que deseja excluir este curso?', () => { updateData({ courses: data.courses.filter(c => c.id !== id) }); } ); }; const inputClass = "w-full px-4 py-3 bg-white text-black border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-indigo-500 transition-all shadow-sm"; return (

Cursos

Gerencie os cursos oferecidos pela escola.

{data.courses.map(course => (

{course.name}

{course.description || 'Sem descrição definida.'}

Duração

{course.duration}

Investimento Mensal

R$ {course.monthlyFee.toLocaleString('pt-BR', { minimumFractionDigits: 2 })}

))}
{isModalOpen && (
{/* Blue Top Bar */}

{editingCourse ? 'Editar Curso' : 'Novo Curso'}

Defina os detalhes e valores do curso.

setFormData({...formData, name: e.target.value})} />