"use client";

import type React from "react";
import { useState, useEffect } from "react";
import { useRouter, usePathname } from "next/navigation";
import Link from "next/link";
import Cookies from "js-cookie"; // <-- 1. IMPORTAÇÃO ADICIONADA

import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Badge } from "@/components/ui/badge";
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog";
import { Search, Bell, Calendar, Clock, User, LogOut, Menu, X, Home, FileText, ChevronLeft, ChevronRight } from "lucide-react";

interface DoctorData {
    id: string;
    name: string;
    email: string;
    phone: string;
    cpf: string;
    crm: string;
    specialty: string;
    department: string;
    permissions: object;
}

interface PatientLayoutProps {
    children: React.ReactNode;
}

export default function DoctorLayout({ children }: PatientLayoutProps) {
    const [doctorData, setDoctorData] = useState<DoctorData | null>(null);
    const [sidebarCollapsed, setSidebarCollapsed] = useState(false);
    const [showLogoutDialog, setShowLogoutDialog] = useState(false);
    const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);
    const [windowWidth, setWindowWidth] = useState(0);
    const isMobile = windowWidth < 1024;
    const router = useRouter();
    const pathname = usePathname();

    // ==================================================================
    // 2. BLOCO DE SEGURANÇA CORRIGIDO
    // ==================================================================
    useEffect(() => {
        const userInfoString = localStorage.getItem("user_info");
        const token = Cookies.get("access_token");

        if (userInfoString && token) {
            const userInfo = JSON.parse(userInfoString);
            
            // 3. "TRADUZIMOS" os dados da API para o formato que o layout espera
            setDoctorData({
                id: userInfo.id || "",
                name: userInfo.user_metadata?.full_name || "Doutor(a)",
                email: userInfo.email || "",
                specialty: userInfo.user_metadata?.specialty || "Especialidade",
                // Campos que não vêm do login, definidos como vazios para não quebrar
                phone: userInfo.phone || "",
                cpf: "",
                crm: "",
                department: "",
                permissions: {},
            });
        } else {
            // Se faltar o token ou os dados, volta para o login
            router.push("/doctor/login");
        }
    }, [router]);

    useEffect(() => {
  const handleResize = () => setWindowWidth(window.innerWidth);
  handleResize(); // inicializa com a largura atual
  window.addEventListener("resize", handleResize);
  return () => window.removeEventListener("resize", handleResize);
}, []);

useEffect(() => {
  if (isMobile) {
    setSidebarCollapsed(true);
  } else {
    setSidebarCollapsed(false);
  }
}, [isMobile]);

    const handleLogout = () => {
        setShowLogoutDialog(true);
    };

    const confirmLogout = () => {
        localStorage.removeItem("doctorData");
        setShowLogoutDialog(false);
        router.push("/");
    };

    const cancelLogout = () => {
        setShowLogoutDialog(false);
    };

    const toggleMobileMenu = () => {
        setIsMobileMenuOpen(!isMobileMenuOpen);
    };

    const menuItems = [
        {
            href: "#",
            icon: Home,
            label: "Dashboard",
            // Botão para o dashboard do médico
        },
        {
            href: "/doctor/medicos/consultas",
            icon: Calendar,
            label: "Consultas",
            // Botão para página de consultas marcadas do médico atual
        },
        {
            href: "#",
            icon: Clock,
            label: "Editor de Laudo",
            // Botão para página do editor de laudo
        },
        {
            href: "/doctor/medicos",
            icon: User,
            label: "Pacientes",
            // Botão para a página de visualização de todos os pacientes
        },
    ];

    if (!doctorData) {
        return <div>Carregando...</div>;
    }

    return (
        <div className="min-h-screen bg-background flex">
            {/* Sidebar para desktop */}
            <div className={`bg-card border-r border transition-all duration-300 ${sidebarCollapsed ? "w-16" : "w-64"} fixed left-0 top-0 h-screen flex flex-col z-50`}>
                <div className="p-4 border-b border">
                    <div className="flex items-center justify-between">
                        {!sidebarCollapsed && (
                            <div className="flex items-center gap-2">
                                <div className="w-8 h-8 bg-blue-600 rounded-lg flex items-center justify-center">
                                    <div className="w-4 h-4 bg-white rounded-sm"></div>
                                </div>
                                <span className="font-semibold text-foreground">MidConnecta</span>
                            </div>
                        )}
                        <Button variant="ghost" size="sm" onClick={() => setSidebarCollapsed(!sidebarCollapsed)} className="p-1">
                            {sidebarCollapsed ? <ChevronRight className="w-4 h-4" /> : <ChevronLeft className="w-4 h-4" />}
                        </Button>
                    </div>
                </div>

                <nav className="flex-1 p-2 overflow-y-auto">
                    {menuItems.map((item) => {
                        const Icon = item.icon;
                        const isActive = pathname === item.href || (item.href !== "/" && pathname.startsWith(item.href));

                        return (
                            <Link key={item.href} href={item.href}>
                                <div className={`flex items-center gap-3 px-3 py-2 rounded-lg mb-1 transition-colors ${isActive ? "bg-accent text-accent-foreground border-r-2 border-primary" : "text-muted-foreground hover:bg-accent"}`}>
                                    <Icon className="w-5 h-5 flex-shrink-0" />
                                    {!sidebarCollapsed && <span className="font-medium">{item.label}</span>}
                                </div>
                            </Link>
                        );
                    })}
                </nav>

                <div className="border-t p-4 mt-auto">
                    <div className="flex items-center space-x-3 mb-4">
                        {/* Se a sidebar estiver recolhida, o avatar e o texto do usuário também devem ser condensados ou ocultados */}
                        {!sidebarCollapsed && (
                            <>
                                <Avatar>
                                    <AvatarImage src="/placeholder.svg?height=40&width=40" />
                                    <AvatarFallback>
                                        {doctorData.name
                                            .split(" ")
                                            .map((n) => n[0])
                                            .join("")}
                                    </AvatarFallback>
                                </Avatar>
                                <div className="flex-1 min-w-0">
                                    <p className="text-sm font-medium text-foreground truncate">{doctorData.name}</p>
                                    <p className="text-xs text-muted-foreground truncate">{doctorData.specialty}</p>
                                </div>
                            </>
                        )}
                        {sidebarCollapsed && (
                            <Avatar className="mx-auto"> {/* Centraliza o avatar quando recolhido */}
                                <AvatarImage src="/placeholder.svg?height=40&width=40" />
                                <AvatarFallback>
                                    {doctorData.name
                                        .split(" ")
                                        .map((n) => n[0])
                                        .join("")}
                                </AvatarFallback>
                            </Avatar>
                        )}
                    </div>

                    {/* Novo botão de sair, usando a mesma estrutura dos itens de menu */}
                    <div
                        className={`flex items-center gap-3 px-3 py-2 rounded-lg mb-1 transition-colors text-muted-foreground hover:bg-accent cursor-pointer ${sidebarCollapsed ? "justify-center" : ""}`}
                        onClick={handleLogout}
                    >
                        <LogOut className="w-5 h-5 flex-shrink-0" />
                        {!sidebarCollapsed && <span className="font-medium">Sair</span>}
                    </div>
                </div>
            </div>
            {isMobileMenuOpen && (
                <div className="fixed inset-0 bg-black bg-opacity-50 z-40 md:hidden" onClick={toggleMobileMenu}></div>
            )}
            <div className={`bg-card border-r border fixed left-0 top-0 h-screen flex flex-col z-50 transition-transform duration-300 md:hidden ${isMobileMenuOpen ? "translate-x-0 w-64" : "-translate-x-full w-64"}`}>
                <div className="p-4 border-b border flex items-center justify-between">
                    <div className="flex items-center gap-2">
                        <div className="w-8 h-8 bg-blue-600 rounded-lg flex items-center justify-center">
                            <div className="w-4 h-4 bg-white rounded-sm"></div>
                        </div>
                        <span className="font-semibold text-foreground">Hospital System</span>
                    </div>
                    <Button variant="ghost" size="sm" onClick={toggleMobileMenu} className="p-1">
                        <X className="w-4 h-4" />
                    </Button>
                </div>

                <nav className="flex-1 p-2 overflow-y-auto">
                    {menuItems.map((item) => {
                        const Icon = item.icon;
                        const isActive = pathname === item.href || (item.href !== "/" && pathname.startsWith(item.href));

                        return (
                            <Link key={item.href} href={item.href} onClick={toggleMobileMenu}> {/* Fechar menu ao clicar */}
                                <div className={`flex items-center gap-3 px-3 py-2 rounded-lg mb-1 transition-colors ${isActive ? "bg-accent text-accent-foreground border-r-2 border-primary" : "text-muted-foreground hover:bg-accent"}`}>
                                    <Icon className="w-5 h-5 flex-shrink-0" />
                                    <span className="font-medium">{item.label}</span>
                                </div>
                            </Link>
                        );
                    })}
                </nav>

                <div className="border-t p-4 mt-auto">
                    <div className="flex items-center space-x-3 mb-4">
                        <Avatar>
                            <AvatarImage src="/placeholder.svg?height=40&width=40" />
                            <AvatarFallback>
                                {doctorData.name
                                    .split(" ")
                                    .map((n) => n[0])
                                    .join("")}
                            </AvatarFallback>
                        </Avatar>
                        <div className="flex-1 min-w-0">
                            <p className="text-sm font-medium text-foreground truncate">{doctorData.name}</p>
                            <p className="text-xs text-muted-foreground truncate">{doctorData.specialty}</p>
                        </div>
                    </div>
                    <Button variant="outline" size="sm" className="w-full bg-transparent" onClick={() => { handleLogout(); toggleMobileMenu(); }}> {/* Fechar menu ao deslogar */}
                        <LogOut className="mr-2 h-4 w-4" />
                        Sair
                    </Button>
                </div>
            </div>


            {/* Main Content */}
      <div className={`flex-1 flex flex-col transition-all duration-300 ${sidebarCollapsed ? "ml-16" : "ml-64"}`}>
                {/* Header */}
                <header className="bg-card border-b border px-6 py-4">
                    <div className="flex items-center justify-between">
                        <div className="flex items-center gap-4 flex-1">
                            <div className="relative flex-1 max-w-md">
                                <Search className="absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400 w-4 h-4" />
                                <Input placeholder="Buscar paciente" className="pl-10 bg-background border" />
                            </div>
                        </div>

                        <div className="flex items-center gap-4">
                            <Button variant="ghost" size="sm" className="relative">
                                <Bell className="w-5 h-5" />
                                <Badge className="absolute -top-1 -right-1 w-5 h-5 p-0 flex items-center justify-center bg-red-500 text-white text-xs">1</Badge>
                            </Button>
                        </div>
                    </div>
                </header>

                {/* Page Content */}
                <main className="flex-1 p-6">{children}</main>
            </div>

            {/* Logout confirmation dialog */}
            <Dialog open={showLogoutDialog} onOpenChange={setShowLogoutDialog}>
                <DialogContent className="sm:max-w-md">
                    <DialogHeader>
                        <DialogTitle>Confirmar Saída</DialogTitle>
                        <DialogDescription>Deseja realmente sair do sistema? Você precisará fazer login novamente para acessar sua conta.</DialogDescription>
                    </DialogHeader>
                    <DialogFooter className="flex gap-2">
                        <Button variant="outline" onClick={cancelLogout}>
                            Cancelar
                        </Button>
                        <Button variant="destructive" onClick={confirmLogout}>
                            <LogOut className="mr-2 h-4 w-4" />
                            Sair
                        </Button>
                    </DialogFooter>
                </DialogContent>
            </Dialog>
        </div>
    );
}