import { useEffect, useState } from 'react';
import { useNavigate } from 'react-router-dom';
import { useAdminTask } from '@/contexts/AdminTaskContext';
import GroupMultiSelect from '@/components/generic/GroupMultiSelect';
import api from '@/utils/api.util';
import { cn } from '@/lib/utils';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
import { Textarea } from '@/components/ui/textarea';
import { Label } from '@/components/ui/label';
import { Card, CardContent } from '@/components/ui/card';
import { Badge } from '@/components/ui/badge';
import { ArrowLeft, ChevronRight, ChevronLeft, Check, FileText, Users, ClipboardList } from 'lucide-react';
// ─── Steps ────────────────────────────────────────────────────────────────────
const STEPS = [
{ id: 0, label: 'Details', icon: FileText },
{ id: 1, label: 'Assign Groups', icon: Users },
{ id: 2, label: 'Review', icon: ClipboardList },
];
// ─── Summary row ──────────────────────────────────────────────────────────────
function SummaryRow({ label, value }) {
if (!value) return null;
return (
{label}
{value}
);
}
export default function CreateTaskList() {
const navigate = useNavigate();
const { createTaskList, assignGroups, loading } = useAdminTask();
const [step, setStep] = useState(0);
const [form, setForm] = useState({ name: '', description: '' });
const [selectedGroupIds, setSelectedGroupIds] = useState([]);
const [allGroups, setAllGroups] = useState([]);
const [errors, setErrors] = useState({});
// Fetch groups for the review step's summary (names, not just ids)
useEffect(() => {
api.get('/admin/groups', { params: { limit: 500 } })
.then((res) => setAllGroups(res.data?.data?.data ?? res.data?.data ?? []))
.catch(() => {});
}, []);
const validateDetails = () => {
const e = {};
if (!form.name.trim()) e.name = 'Task list name is required.';
setErrors(e);
return Object.keys(e).length === 0;
};
const handleNext = () => {
if (step === 0 && !validateDetails()) return;
setStep((s) => s + 1);
};
const handleBack = () => {
if (step === 0) navigate('/admin/taskList');
else setStep((s) => s - 1);
};
const handleCreate = async () => {
if (!validateDetails()) { setStep(0); return; }
const created = await createTaskList({
name: form.name.trim(),
description: form.description.trim() || null,
});
if (!created) return; // createTaskList already toasts on error
// Assign selected groups if any — non-blocking: navigate regardless
if (selectedGroupIds.length > 0) {
await assignGroups(created.task_list_id, selectedGroupIds);
}
navigate(`/admin/taskList/${created.task_list_id}/view`);
};
const selectedGroupNames = allGroups
.filter((g) => selectedGroupIds.includes(g.group_id))
.map((g) => g.name);
return (
// ← plain div, no