'use client'; import React from 'react'; import { Scale, Users, Clock, Bell, Shield, Vote, UserCheck, AlertTriangle } from 'lucide-react'; import type { LeagueConfigFormModel } from '@/lib/types/LeagueConfigFormModel'; interface LeagueStewardingSectionProps { form: LeagueConfigFormModel; onChange: (form: LeagueConfigFormModel) => void; readOnly?: boolean; } type DecisionModeOption = { value: NonNullable['decisionMode']; label: string; description: string; icon: React.ReactNode; requiresVotes: boolean; }; const decisionModeOptions: DecisionModeOption[] = [ { value: 'single_steward', label: 'Single Steward', description: 'A single steward/admin makes all penalty decisions', icon: , requiresVotes: false, }, { value: 'committee_vote', label: 'Committee Vote', description: 'A group votes to uphold/dismiss protests', icon: , requiresVotes: true, }, ]; export function LeagueStewardingSection({ form, onChange, readOnly = false, }: LeagueStewardingSectionProps) { // Provide default stewarding settings if not present const stewarding = form.stewarding ?? { decisionMode: 'single_steward' as const, requiredVotes: 2, requireDefense: false, defenseTimeLimit: 48, voteTimeLimit: 72, protestDeadlineHours: 48, stewardingClosesHours: 168, notifyAccusedOnProtest: true, notifyOnVoteRequired: true, }; const updateStewarding = (updates: Partial>) => { onChange({ ...form, stewarding: { ...stewarding, ...updates, }, }); }; const selectedMode = decisionModeOptions.find((m) => m.value === stewarding.decisionMode); return (
{/* Decision Mode Selection */}

How are protest decisions made?

Choose who has the authority to issue penalties

{decisionModeOptions.map((option) => ( ))}
{/* Vote Requirements (conditional) */} {selectedMode?.requiresVotes && (

Voting Configuration

)} {/* Defense Settings */}

Defense Requirements

Should accused drivers be required to submit a defense?

{stewarding.requireDefense && (

After this time, the decision can proceed without a defense

)}
{/* Deadlines */}

Deadlines

Set time limits for filing protests and closing stewarding

Drivers cannot file protests after this time

All stewarding must be concluded by this time

{/* Notifications */}

Notifications

Configure automatic notifications for involved parties

{/* Warning about strict settings */} {stewarding.requireDefense && stewarding.decisionMode !== 'single_steward' && (

Strict settings enabled

Requiring defense and voting may delay penalty decisions. Make sure your stewards/members are active enough to meet the deadlines.

)}
); }