export type AppState = 'WELCOME' | 'LOGIN' | 'DASHBOARD' | 'ADMIN_LANDING' | 'FACULTY_DASHBOARD' | 'VERIFY'; export type UserRole = 'STUDENT' | 'COORDINATOR' | 'ADMIN'; export type DashboardView = 'HOME' | 'EVENTS' | 'REGISTRATIONS' | 'PROFILE' | 'ABOUT' | 'CONTACT' | 'STATUS_TRACKER'; export type FacultyView = 'OVERVIEW' | 'PARTICIPANTS' | 'ATTENDANCE' | 'NOTIFICATIONS' | 'PROFILE'; export interface ResourcePerson { id?: string; type: 'INTERNAL' | 'EXTERNAL'; name: string; dept?: string; college_name?: string; phone: string; email: string; } export interface Batch { id: number; startTime: string; endTime: string; date?: string; resourcePerson?: ResourcePerson; } export interface EventDay { date: string; batches: Batch[]; // If unified, this will have one batch at index 0 startTime?: string; endTime?: string; resourcePerson?: ResourcePerson; } export interface EventSchedule { id: string; event_id: string; day_idx: number; batch_idx: number; date: string; start_time: string; end_time: string; resource_person?: ResourcePerson; } export interface Event { id: string; title: string; date: string; location: string; category: 'TECHNICAL' | 'NON-TECHNICAL' | 'WORKSHOP' | 'CENTRE-ACTIVITY'; domain: string; club?: string; image: string; pricingType: 'PAID' | 'FREE'; coordinator: string; status?: 'Registered' | 'Event Ongoing' | 'Completed' | 'Scheduled' | 'APPROVED' | 'COMPLETED' | 'ONGOING' | 'REJECTED'; hasRegistrationFee?: boolean; registrationFee?: number; paymentLink?: string; registrationDeadline?: string; maxParticipants?: number; durationDays?: number; schedule?: EventSchedule[]; deptLimits?: Record; // Maps department codes to specific seat counts deptSectionLimits?: Record>; // Maps department codes to their section capacities currentParticipants?: number; currentDeptCounts?: Record; currentDeptSectionCounts?: Record>; // Maps department codes to their sections' current counts event_summary?: string; isTeamEvent?: boolean; teamSizeLimit?: number; teamComposition?: 'INTER_DEPT' | 'MIXED'; created_by?: string; participantType?: 'INTERNAL' | 'EXTERNAL' | 'BOTH'; verificationStatus?: 'PENDING' | 'PENDING_HOD' | 'PENDING_ADMIN' | 'APPROVED' | 'REJECTED'; refreshment_expense?: number; transportation_expense?: number; session_coverage_fee?: number; total_expense?: number; conducting_dept?: string; request_by_faculty?: string; request_by_HOD?: string; targetedBatch?: string; openToAll?: boolean; academicYears?: string[]; targetedSections?: string[]; department?: string; } export interface Announcement { id: string; title: string; message: string; timestamp: any; expiresAt?: any; type: 'DELAY' | 'INFO' | 'URGENT' | 'ENDED' | 'ONGOING'; eventId?: string; eventTitle?: string; } export interface Ticket { ticketId: string; qrCodeData: string; eventId: string; userId: string; userEmail: string; userName: string; regNo?: string; dept?: string; section?: string; status: 'ACTIVE' | 'USED' | 'CANCELLED'; createdAt: any; } export interface Participant { id: string; studentName: string; regNo: string; branch: string; year: string; eventName: string; eventId: string; location: string; timings: string; category: 'TECHNICAL' | 'NON-TECHNICAL' | 'WORKSHOP' | 'CENTRE-ACTIVITY'; } export interface StudentRequest { id: string; studentName: string; rollNo: string; branch: string; eventName: string; eventId: string; timestamp: string; status: 'PENDING' | 'APPROVED' | 'REJECTED'; } export interface UserProfile { name: string; email: string; phone?: string; year?: string; section?: string; department?: string; reg_no?: string; id?: string; } export interface SpecialEvent { id: string; created_at: string; title: string; description: string; link: string; created_by: string; is_active: boolean; verificationStatus?: 'PENDING' | 'PENDING_HOD' | 'PENDING_ADMIN' | 'APPROVED' | 'REJECTED'; image?: string; } export interface DeptBatch { id: number; name: string; department: string; classes: string[]; // List of Year - Section strings, e.g. ["1st Year - A", "2nd Year - B"] }