import { Head, useForm } from '@inertiajs/react';
import { Building2, Mail, MapPin } from 'lucide-react';
import PortalLayout from '@/layouts/portal-layout';

interface UserData {
    id: number;
    name: string;
    email: string;
    title: string | null;
    profession: string | null;
    membership_number: string | null;
    institution: { name: string; country: string | null } | null;
}

export default function Profile({ user }: { user: UserData }) {
    const { data, setData, put, processing, errors, wasSuccessful } = useForm({
        name:       user.name,
        title:      user.title ?? '',
        profession: user.profession ?? '',
    });

    function submit(e: React.FormEvent) {
        e.preventDefault();
        put('/portal/profile');
    }

    return (
        <>
            <Head title="Profile" />
            <div className="space-y-8 max-w-2xl">
                <div>
                    <h1 className="font-serif text-2xl font-bold text-[#0A2647]">Profile</h1>
                    <p className="mt-1 text-sm text-muted-foreground">Your personal information and membership details</p>
                </div>

                {/* Read-only info */}
                <div className="rounded-xl border border-border bg-white p-6 space-y-4">
                    <h2 className="text-xs font-semibold uppercase tracking-widest text-[#1B6B7D] mb-2">Account Info</h2>
                    <div className="flex items-center gap-3 text-sm">
                        <Mail size={14} className="text-muted-foreground flex-shrink-0" />
                        <span className="text-[#0A2647]">{user.email}</span>
                    </div>
                    {user.membership_number && (
                        <div className="flex items-center gap-3 text-sm">
                            <span className="w-3.5 h-3.5 flex-shrink-0 text-center text-[10px] font-bold text-muted-foreground">#</span>
                            <span className="text-[#0A2647] font-mono">{user.membership_number}</span>
                        </div>
                    )}
                    {user.institution && (
                        <div className="flex items-start gap-3 text-sm">
                            <Building2 size={14} className="text-muted-foreground flex-shrink-0 mt-0.5" />
                            <div>
                                <p className="text-[#0A2647]">{user.institution.name}</p>
                                {user.institution.country && (
                                    <p className="text-xs text-muted-foreground flex items-center gap-1 mt-0.5">
                                        <MapPin size={10} /> {user.institution.country}
                                    </p>
                                )}
                            </div>
                        </div>
                    )}
                </div>

                {/* Editable fields */}
                <form onSubmit={submit} className="rounded-xl border border-border bg-white p-6 space-y-5">
                    <h2 className="text-xs font-semibold uppercase tracking-widest text-[#1B6B7D] mb-2">Edit Profile</h2>

                    {wasSuccessful && (
                        <p className="text-sm text-green-600 bg-green-50 border border-green-200 rounded-lg px-4 py-2">
                            Profile updated successfully.
                        </p>
                    )}

                    <div>
                        <label className="block text-xs font-semibold text-[#4A6585] uppercase tracking-wider mb-1.5">Full Name *</label>
                        <input
                            type="text"
                            value={data.name}
                            onChange={(e) => setData('name', e.target.value)}
                            className="w-full rounded-lg border border-border px-4 py-2.5 text-sm text-[#0A2647] focus:outline-none focus:ring-2 focus:ring-[#0A2647]/20"
                        />
                        {errors.name && <p className="text-xs text-red-500 mt-1">{errors.name}</p>}
                    </div>

                    <div>
                        <label className="block text-xs font-semibold text-[#4A6585] uppercase tracking-wider mb-1.5">Title</label>
                        <select
                            value={data.title}
                            onChange={(e) => setData('title', e.target.value)}
                            className="w-full rounded-lg border border-border px-4 py-2.5 text-sm text-[#0A2647] focus:outline-none focus:ring-2 focus:ring-[#0A2647]/20 bg-white"
                        >
                            <option value="">None</option>
                            {['Mr', 'Ms', 'Mrs', 'Dr', 'Prof', 'Eng'].map((t) => (
                                <option key={t} value={t}>{t}</option>
                            ))}
                        </select>
                    </div>

                    <div>
                        <label className="block text-xs font-semibold text-[#4A6585] uppercase tracking-wider mb-1.5">Profession / Role</label>
                        <input
                            type="text"
                            value={data.profession}
                            onChange={(e) => setData('profession', e.target.value)}
                            placeholder="e.g. Biomedical Engineer, Lecturer"
                            className="w-full rounded-lg border border-border px-4 py-2.5 text-sm text-[#0A2647] focus:outline-none focus:ring-2 focus:ring-[#0A2647]/20"
                        />
                    </div>

                    <button
                        type="submit"
                        disabled={processing}
                        className="rounded-full bg-[#0A2647] px-8 py-2.5 text-sm font-semibold text-white hover:bg-[#071D35] disabled:opacity-50 transition-colors"
                    >
                        {processing ? 'Saving…' : 'Save Changes'}
                    </button>
                </form>
            </div>
        </>
    );
}

Profile.layout = (page: React.ReactNode) => <PortalLayout>{page}</PortalLayout>;
