'use client'; import React, { useState } from 'react'; import { useRouter } from 'next/navigation'; import { Club, ClubMetrics, ClubUpcomingRide, ClubMember, ClubActivityItem, UserPortalPermissions, ClubRole, } from './types'; import { ClubMasthead } from './club-masthead'; import { ExecutiveMetrics } from './metric-card'; import { AttentionSection } from './attention-card'; import { UpcomingRidesSection } from './club-ride-card'; import { RolesAndRanksSummary } from './roles-and-ranks-summary'; import { ClubActivityList } from './club-activity-list'; interface FounderOverviewProps { club: Club; metrics: ClubMetrics; upcomingRides: ClubUpcomingRide[]; pendingApplications: ClubMember[]; activities: ClubActivityItem[]; permissions: UserPortalPermissions; onRefresh?: () => void; } export function FounderOverview({ club, metrics: initialMetrics, upcomingRides: initialRides, pendingApplications: initialApps, activities, permissions, onRefresh, }: FounderOverviewProps) { const router = useRouter(); const [pendingApps, setPendingApps] = useState(initialApps); const [rides] = useState(initialRides); const [metrics, setMetrics] = useState(initialMetrics); const [notification, setNotification] = useState(null); // Modal dialog state const [activeModal, setActiveModal] = useState<'plan_ride' | 'invite_member' | 'settings' | 'announcement' | 'switch_club' | null>(null); function showToast(message: string) { setNotification(message); setTimeout(() => { setNotification((curr) => (curr === message ? null : curr)); }, 4000); } function handleApproveApplication(uid: string) { if (!permissions.canApproveApplications) { showToast('Administrative privileges are required to approve applications.'); return; } const target = pendingApps.find((a) => a.uid === uid); setPendingApps((prev) => prev.filter((a) => a.uid !== uid)); setMetrics((prev) => ({ ...prev, members: prev.members + 1, pendingApplications: Math.max(0, prev.pendingApplications - 1), })); showToast(`Approved ${target?.displayName ?? 'Applicant'}'s membership.`); } function handleReviewApplication(uid: string) { if (uid === 'all') { showToast('Navigating to Applications triage management queue.'); } else { const target = pendingApps.find((a) => a.uid === uid); showToast(`Reviewing applicant profile: ${target?.displayName ?? 'Rider'}`); } } function handleAssignSweep(rideId: string) { if (!permissions.canPlanRides) { showToast('Road Captain or administrative role required to assign sweep positions.'); return; } showToast('Sweep assignment modal opened. Designate qualified Road Marshal.'); } return (
{/* Toast Notification */} {notification && (
info {notification}
)} {/* Member Access Notice if current role is member */} {!permissions.canManageSettings && (
visibility Viewing Founder Portal in Member View Mode. Administrative actions and mutations are restricted to Club Owner and Admins.
View-Only
)} {/* 1. CLUB IDENTITY MASTHEAD */} setActiveModal('plan_ride')} onInviteMember={() => setActiveModal('invite_member')} onOpenSettings={() => setActiveModal('settings')} /> {/* 2. EXECUTIVE METRICS */} {/* 3. ATTENTION REQUIRED */} showToast('All pending review alerts acknowledged.')} /> {/* 4. UPCOMING CLUB RIDES */} setActiveModal('plan_ride')} onManageRide={(rideId) => showToast(`Opening management cockpit for Ride ID: ${rideId}`)} onViewRoster={(rideId) => { if (rideId === 'all') { showToast('Full ride schedule is planned for a future release.'); } else { showToast('Member roster details will be available in an upcoming release.'); } }} onViewRoute={(routeId) => showToast(`Opening route navigation map: ${routeId ?? 'default'}`)} /> {/* 5. ROLES & RANKS */} {/* 6. CLUB ACTIVITY */} {/* Modal Dialogs */} {activeModal && (

{activeModal === 'plan_ride' && 'Plan Club Ride'} {activeModal === 'invite_member' && 'Invite New Member'} {activeModal === 'settings' && 'Club Administration Settings'} {activeModal === 'announcement' && 'Post Club Announcement'} {activeModal === 'switch_club' && 'Switch Club Roster'}

{activeModal === 'plan_ride' && (

Create a new scheduled Group Ride associated with {club.name}. Designated routes and checkpoints will sync with ride participants.

)} {activeModal === 'invite_member' && (

Send an official membership invitation to a verified rider handle. Once accepted, they will join the club roster.

)} {activeModal === 'settings' && (

Club metadata, visibility policy, admission policy, and regional preferences are administered here.

)} {activeModal === 'announcement' && (

Broadcast an administrative update to all active members of {club.name}.

)} {activeModal === 'switch_club' && (

Select another registered Motorcycle Club from your active memberships.

)}
FEATURE CONSOLE // STAGE FP-1 PROD FOUNDATION
)}
); }