import { Head, useForm, usePage } from '@inertiajs/react';
import AppLogoIcon from '@/components/app-logo-icon';

export default function AcceptInvitation() {
    const props = usePage().props as unknown as {
        token: string; email: string; organization: string; existingUser: boolean;
    };
    const { token, email, organization, existingUser } = props;

    const form = useForm({ name: '', password: '', password_confirmation: '' });

    const submit = (e: React.FormEvent) => {
        e.preventDefault();
        form.post(`/invitation/${token}`);
    };

    return (
        <div className="flex min-h-dvh items-center justify-center bg-background px-6">
            <Head title="Accept Invitation" />
            <div className="w-full max-w-sm">
                <div className="mb-6 flex flex-col items-center text-center">
                    <span className="flex size-11 items-center justify-center rounded-xl bg-primary text-primary-foreground">
                        <AppLogoIcon className="size-6" />
                    </span>
                    <h1 className="mt-4 text-xl font-semibold text-foreground">Join {organization}</h1>
                    <p className="mt-1 text-sm text-muted-foreground">
                        You're invited as <strong>{email}</strong>.
                        {existingUser ? ' Confirm to join with your existing account.' : ' Set a password to finish.'}
                    </p>
                </div>

                <form onSubmit={submit} className="space-y-4">
                    {!existingUser && (
                        <>
                            <div>
                                <label className="mb-1 block text-sm font-medium text-foreground">Your name</label>
                                <input value={form.data.name} onChange={(e) => form.setData('name', e.target.value)}
                                    className="w-full rounded-md border border-border bg-background px-3 py-2 text-sm" required />
                                {form.errors.name && <p className="mt-1 text-xs text-destructive">{form.errors.name}</p>}
                            </div>
                            <div>
                                <label className="mb-1 block text-sm font-medium text-foreground">Password</label>
                                <input type="password" value={form.data.password} onChange={(e) => form.setData('password', e.target.value)}
                                    className="w-full rounded-md border border-border bg-background px-3 py-2 text-sm" required />
                                {form.errors.password && <p className="mt-1 text-xs text-destructive">{form.errors.password}</p>}
                            </div>
                            <div>
                                <label className="mb-1 block text-sm font-medium text-foreground">Confirm password</label>
                                <input type="password" value={form.data.password_confirmation} onChange={(e) => form.setData('password_confirmation', e.target.value)}
                                    className="w-full rounded-md border border-border bg-background px-3 py-2 text-sm" required />
                            </div>
                        </>
                    )}
                    <button type="submit" disabled={form.processing}
                        className="w-full rounded-md bg-primary py-2.5 text-sm font-medium text-primary-foreground hover:opacity-90 disabled:opacity-50">
                        {existingUser ? 'Join organization' : 'Create account & join'}
                    </button>
                </form>
            </div>
        </div>
    );
}
