﻿import React, { useState } from 'react';
import { Head, useForm } from '@inertiajs/react';
import { StaffLayout } from '@/Layouts/StaffLayout';
import { Modal } from '@/Components/Modal';
import { Users, Plus, ShieldCheck, Key } from 'lucide-react';

interface Props {
    users: any[];
    roles: any[];
}

export default function AdminStaff({ users = [], roles = [] }: Props) {
    const [createModalOpen, setCreateModalOpen] = useState(false);

    const userForm = useForm({
        name: '',
        email: '',
        phone: '',
        role_id: roles[0]?.id || 1,
        password: '',
    });

    const handleCreate = (e: React.FormEvent) => {
        e.preventDefault();
        userForm.post('/ssadmin/staff/user', {
            preserveScroll: true,
            onSuccess: () => {
                setCreateModalOpen(false);
                userForm.reset();
            },
        });
    };

    return (
        <StaffLayout title="Staff Accounts & Role Permissions">
            <Head title="Staff Access Control — Primon Hotel" />

            <div className="space-y-8">
                <div className="flex items-center justify-between">
                    <div>
                        <h2 className="font-serif text-2xl font-medium text-[#1A1A1A]">Hotel Employees & Access Portals</h2>
                        <p className="text-xs text-gray-500">Manage 13 distinct hotel roles and departmental access permissions.</p>
                    </div>

                    <button
                        onClick={() => setCreateModalOpen(true)}
                        className="bg-[#1A1A1A] hover:bg-[#26292E] text-[#FBF9F5] px-4 py-2 rounded-xl text-xs font-bold uppercase tracking-wider flex items-center gap-1.5 shadow"
                    >
                        <Plus className="h-4 w-4 text-[#C5A880]" />
                        <span>Add Staff Member</span>
                    </button>
                </div>

                <div className="bg-[#FBF9F5] rounded-3xl border border-[#C5A880]/20 shadow-sm overflow-hidden">
                    <div className="overflow-x-auto">
                        <table className="w-full text-left text-xs">
                            <thead className="bg-[#F3EFEA] text-[10px] uppercase text-gray-600 border-b border-gray-200">
                                <tr>
                                    <th className="p-4">Employee</th>
                                    <th className="p-4">Email</th>
                                    <th className="p-4">Phone</th>
                                    <th className="p-4">Assigned Role</th>
                                    <th className="p-4">Status</th>
                                </tr>
                            </thead>
                            <tbody className="divide-y divide-gray-200">
                                {users.map((u) => (
                                    <tr key={u.id} className="hover:bg-gray-50">
                                        <td className="p-4">
                                            <span className="font-bold text-[#1A1A1A] block">{u.name}</span>
                                        </td>
                                        <td className="p-4">{u.email}</td>
                                        <td className="p-4">{u.phone || '—'}</td>
                                        <td className="p-4">
                                            <span className="bg-[#1A1A1A] text-[#C5A880] px-2.5 py-0.5 rounded-full text-[10px] font-bold uppercase">
                                                {u.role?.name || u.role_name || 'Staff'}
                                            </span>
                                        </td>
                                        <td className="p-4">
                                            <span className="bg-green-100 text-green-800 px-2 py-0.5 rounded text-[10px] font-bold uppercase">
                                                Active
                                            </span>
                                        </td>
                                    </tr>
                                ))}
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>

            {/* Create Staff Modal */}
            <Modal
                isOpen={createModalOpen}
                onClose={() => setCreateModalOpen(false)}
                title="Create Staff Account"
            >
                <form onSubmit={handleCreate} className="space-y-4">
                    <div>
                        <label className="text-xs font-semibold uppercase text-gray-600 block mb-1">Full Name</label>
                        <input
                            type="text"
                            required
                            value={userForm.data.name}
                            onChange={(e) => userForm.setData('name', e.target.value)}
                            className="w-full bg-white border border-gray-300 rounded-xl px-3 py-2 text-xs"
                        />
                    </div>

                    <div className="grid grid-cols-2 gap-4">
                        <div>
                            <label className="text-xs font-semibold uppercase text-gray-600 block mb-1">Email (Login Username)</label>
                            <input
                                type="email"
                                required
                                value={userForm.data.email}
                                onChange={(e) => userForm.setData('email', e.target.value)}
                                className="w-full bg-white border border-gray-300 rounded-xl px-3 py-2 text-xs"
                            />
                        </div>
                        <div>
                            <label className="text-xs font-semibold uppercase text-gray-600 block mb-1">Phone Number</label>
                            <input
                                type="text"
                                value={userForm.data.phone}
                                onChange={(e) => userForm.setData('phone', e.target.value)}
                                className="w-full bg-white border border-gray-300 rounded-xl px-3 py-2 text-xs"
                            />
                        </div>
                    </div>

                    <div className="grid grid-cols-2 gap-4">
                        <div>
                            <label className="text-xs font-semibold uppercase text-gray-600 block mb-1">Assigned Role</label>
                            <select
                                value={userForm.data.role_id}
                                onChange={(e) => userForm.setData('role_id', parseInt(e.target.value))}
                                className="w-full bg-white border border-gray-300 rounded-xl px-3 py-2 text-xs"
                            >
                                {roles.map(r => (
                                    <option key={r.id} value={r.id}>{r.name}</option>
                                ))}
                            </select>
                        </div>
                        <div>
                            <label className="text-xs font-semibold uppercase text-gray-600 block mb-1">Initial Password</label>
                            <input
                                type="password"
                                required
                                minLength={8}
                                value={userForm.data.password}
                                onChange={(e) => userForm.setData('password', e.target.value)}
                                className="w-full bg-white border border-gray-300 rounded-xl px-3 py-2 text-xs"
                            />
                        </div>
                    </div>

                    <button
                        type="submit"
                        disabled={userForm.processing}
                        className="w-full bg-[#1A1A1A] hover:bg-[#C5A880] hover:text-[#1A1A1A] text-white py-3 rounded-xl text-xs font-bold uppercase tracking-widest transition-all"
                    >
                        Create Employee Account
                    </button>
                </form>
            </Modal>
        </StaffLayout>
    );
}
