import { useEffect, useState } from "react"; import { Button, Card, Group, NumberInput, Stack, Text, Title } from "@mantine/core"; import { trainSchedulingService } from "@/services/trainScheduling.service"; import { useToast } from "@/hooks/use-toast"; import type { TrainSchedulingGlobalRules } from "@/types/trainScheduling"; export default function TrainSchedulingGlobalRulesPage() { const { toast } = useToast(); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [form, setForm] = useState>({}); useEffect(() => { void (async () => { try { const rules = await trainSchedulingService.getGlobalRules(); setForm(rules); } catch { toast({ title: "Failed to load train scheduling rules", variant: "destructive" }); } finally { setLoading(false); } })(); }, [toast]); const handleSave = async () => { setSaving(true); try { const updated = await trainSchedulingService.updateGlobalRules({ maxTrainLengthMeters: Number(form.maxTrainLengthMeters), maxTrainWeightTons: Number(form.maxTrainWeightTons), maxWagonsPerTrain: Number(form.maxWagonsPerTrain), max20ftContainerWeightTons: Number(form.max20ftContainerWeightTons), max20ftPairWeightDiffTons: Number(form.max20ftPairWeightDiffTons), }); setForm(updated); toast({ title: "Train scheduling rules saved" }); } catch { toast({ title: "Failed to save rules", variant: "destructive" }); } finally { setSaving(false); } }; return ( Train scheduling rules Global limits applied when previewing and assigning bookings to trains. setForm((current) => ({ ...current, maxTrainLengthMeters: Number(value) })) } min={1} disabled={loading} /> setForm((current) => ({ ...current, maxTrainWeightTons: Number(value) })) } min={1} disabled={loading} /> setForm((current) => ({ ...current, maxWagonsPerTrain: Number(value) })) } min={1} disabled={loading} /> setForm((current) => ({ ...current, max20ftContainerWeightTons: Number(value), })) } min={0.001} disabled={loading} /> setForm((current) => ({ ...current, max20ftPairWeightDiffTons: Number(value), })) } min={0} disabled={loading} /> ); }