import { Ionicons } from '@expo/vector-icons'; import { router } from 'expo-router'; import { useState } from 'react'; import { Pressable, StyleSheet, View } from 'react-native'; import { AppText, Button, Card, FormField, InlineBanner, Screen, SubjectBadge, colors, radius, spacing, type SubjectTone, } from '@/components/ui'; import { collegeApi } from '@/lib/api'; type SubjectDraft = { name: string; code: string; shortName: string; tone: SubjectTone }; const tones: SubjectTone[] = ['ocean', 'aqua', 'lilac', 'sun', 'mint', 'peach']; const makeShortName = (value: string) => value.trim().split(/\s+/).filter(Boolean).map((word) => word[0]).join('').toUpperCase().slice(0, 6); export default function OnboardingScreen() { const [step, setStep] = useState(1); const [name, setName] = useState(''); const [college, setCollege] = useState(''); const [programme, setProgramme] = useState(''); const [semester, setSemester] = useState(''); const [subjectName, setSubjectName] = useState(''); const [subjectCode, setSubjectCode] = useState(''); const [subjects, setSubjects] = useState([]); const [formError, setFormError] = useState(''); const [saving, setSaving] = useState(false); const continueToSubjects = () => { if (!name.trim() || !college.trim()) { setFormError('Your name and college are required.'); return; } setFormError(''); setStep(2); }; const addSubject = () => { const code = subjectCode.trim().toUpperCase(); if (!subjectName.trim() || !code) { setFormError('Add both a subject name and code.'); return; } if (subjects.some((subject) => subject.code === code)) { setFormError('That subject code is already in your list.'); return; } setSubjects((items) => [...items, { name: subjectName.trim(), code, shortName: makeShortName(subjectName), tone: tones[items.length % tones.length] }]); setSubjectName(''); setSubjectCode(''); setFormError(''); }; const finish = async () => { setSaving(true); setFormError(''); try { await collegeApi.updateProfile({ name, college, programme, semester }); for (const subject of subjects) await collegeApi.createSubject({ name: subject.name, code: subject.code, shortName: subject.shortName, color: colors.subject[subject.tone].accent }); router.replace('/'); } catch (error) { setFormError(error instanceof Error ? error.message : 'Please try again.'); } finally { setSaving(false); } }; return CLG Kit {step === 1 ? <> Build your college day. Start with the essentials. We’ll use them to organize your timetable and attendance. {formError ? : null}