// Login — SHOC auth-card treatment (ADR 0003, mirrors AuthPageShell/AuthCardHeader): // centered 384px card on --color-bg-page, brand lockup, Montserrat heading. import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useDispatch } from 'react-redux'; import { Alert, Box, Button, Typography, Divider, Stack } from '@mui/material'; import GoogleIcon from '@mui/icons-material/Google'; import AdminPanelSettingsIcon from '@mui/icons-material/AdminPanelSettings'; import EngineeringIcon from '@mui/icons-material/Engineering'; import PersonIcon from '@mui/icons-material/Person'; import { useAuth } from '../../hooks/useAuth'; import { authApi } from '../../lib/api/auth'; import { setUser, setError } from '../../app/slices/authSlice'; import BrandLockup from '../../components/brand/BrandLockup'; const COGNITO_DOMAIN = import.meta.env.VITE_COGNITO_DOMAIN || ''; const CLIENT_ID = import.meta.env.VITE_COGNITO_CLIENT_ID || ''; const REDIRECT_URI = `${window.location.origin}/callback`; function buildLoginUrl(): string { const params = new URLSearchParams({ client_id: CLIENT_ID, response_type: 'code', scope: 'openid email profile', redirect_uri: REDIRECT_URI, }); return `https://${COGNITO_DOMAIN}/oauth2/authorize?${params.toString()}`; } const devButtonSx = { py: 1.5, height: 56, justifyContent: 'flex-start', } as const; export default function LoginPage() { const navigate = useNavigate(); const dispatch = useDispatch(); const { isAuthenticated, error } = useAuth(); const [loading, setLoading] = useState(false); const isDevMode = !CLIENT_ID; useEffect(() => { if (isAuthenticated) { navigate('/', { replace: true }); } }, [isAuthenticated, navigate]); const devUsers: Record = { SysAdmin: { email: 'adam@seahavenind.com', name: 'Adam Moussa' }, Admin: { email: 'sarah@seahavenind.com', name: 'Sarah Chen' }, Dispatcher: { email: 'mike@seahavenind.com', name: 'Mike Torres' }, }; const handleDevLogin = async (role: string) => { setLoading(true); try { const dev = devUsers[role] ?? devUsers['SysAdmin']!; const user = await authApi.devLogin(dev.email, dev.name, role); dispatch(setUser(user)); navigate('/', { replace: true }); } catch (err) { dispatch(setError(err instanceof Error ? err.message : 'Dev login failed')); } finally { setLoading(false); } }; return ( Welcome back Sign in to your account {error && ( {error} )} {isDevMode ? ( <> Development sign-in — only shown when Cognito is not configured. ) : ( )} Having trouble? Contact your administrator. ); }