import GeneralHeader from '@admin/components/general-header';
import AnnouncementAddModal from '@admin/components/modals/announcement-add-modal';
import { AnnouncementDetailsModal } from '@admin/components/modals/announcement-details-modal';
import { Button } from '@admin/components/ui/button';
import { DropdownMenu, DropdownMenuItem, DropdownMenuTrigger } from '@admin/components/ui/dropdown-menu';
import { Input } from '@admin/components/ui/input';
import { mockAnnouncements } from '@admin/data/static';
import AppLayout from '@admin/layouts/app-layout';
import { Head } from '@inertiajs/react';
import { DropdownMenuContent } from '@radix-ui/react-dropdown-menu';
import { Edit, Eye, MoreVertical, Plus, Trash2 } from 'lucide-react';
import { ReactNode, useMemo, useState } from 'react';

interface Announcement {
    id: string;
    title: string;
    excerpt: string;
    date: string;
    description?: string;
    coverImage?: string;
    likes?: number;
    comments?: number;
}

function Index() {
    const [search, setSearch] = useState('');
    const [announcements, setAnnouncements] = useState<Announcement[]>(mockAnnouncements);
    const [isModalOpen, setIsModalOpen] = useState(false);
    const [modalMode, setModalMode] = useState<'add' | 'edit'>('add');
    const [editing, setEditing] = useState<Announcement | null>(null);
    const [isDetailsModalOpen, setIsDetailsModalOpen] = useState(false);
    const [selectedAnnouncement, setSelectedAnnouncement] = useState<Announcement | null>(null);

    const filtered = useMemo(() => {
        if (!search) return announcements;
        return announcements.filter((a) => (a.title + a.excerpt).toLowerCase().includes(search.toLowerCase()));
    }, [search, announcements]);

    return (
        <div className="flex h-full w-full flex-col bg-card">
            <Head title="News Feed" />
            <div className="border-b border-gray-200 bg-card">
                <GeneralHeader title="News Feed" description="Stay updated with the latest announcements" page="News Feed" />
            </div>
            <div className="h-full min-h-0 flex-1 overflow-y-auto p-2">
                <div className="mb-4 flex items-center justify-between gap-4">
                    <div className="flex flex-1 items-center gap-4">
                        <Input placeholder="Search Announcement" value={search} onChange={(e) => setSearch(e.target.value)} className="max-w-lg" />
                    </div>

                    <div>
                        <Button
                            className="ml-4"
                            onClick={() => {
                                setModalMode('add');
                                setEditing(null);
                                setIsModalOpen(true);
                            }}
                        >
                            <Plus className="h-4 w-4" />
                            Create Post
                        </Button>
                    </div>
                </div>

                <div className="no-scrollbar grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-5">
                    {filtered.map((item) => (
                        <div
                            key={item.id}
                            className="group relative flex h-full cursor-pointer flex-col overflow-hidden rounded-xl border border-gray-200 bg-white transition-all duration-200 hover:border-gray-300 hover:shadow-lg"
                            onClick={() => {
                                setSelectedAnnouncement(item);
                                setIsDetailsModalOpen(true);
                            }}
                        >
                            {/* Cover Image */}
                            <div className="relative h-48 w-full overflow-hidden bg-gradient-to-br from-brand-50 to-indigo-100">
                                {item.coverImage ? (
                                    <img
                                        src={item.coverImage}
                                        alt={item.title}
                                        className="h-full w-full object-cover transition-transform duration-300 group-hover:scale-105"
                                    />
                                ) : (
                                    <div className="flex h-full w-full items-center justify-center bg-gradient-to-br from-slate-100 to-slate-200">
                                        <div className="text-slate-400">
                                            <svg className="h-12 w-12" fill="none" viewBox="0 0 24 24" stroke="currentColor">
                                                <path
                                                    strokeLinecap="round"
                                                    strokeLinejoin="round"
                                                    strokeWidth={1.5}
                                                    d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"
                                                />
                                            </svg>
                                        </div>
                                    </div>
                                )}

                                {/* Action Menu Overlay */}
                                <div className="absolute top-3 right-3">
                                    <DropdownMenu>
                                        <DropdownMenuTrigger asChild>
                                            <button
                                                className="flex h-8 w-8 items-center justify-center rounded-full bg-white/10 backdrop-blur-sm transition-all hover:bg-white/90"
                                                onClick={(e) => e.stopPropagation()}
                                            >
                                                <MoreVertical className="h-4 w-4 text-white" />
                                            </button>
                                        </DropdownMenuTrigger>
                                        <DropdownMenuContent align="end" className="w-32 rounded-lg border bg-white p-1 shadow-lg">
                                            <DropdownMenuItem
                                                onClick={(e) => {
                                                    e.stopPropagation();
                                                    setModalMode('edit');
                                                    setEditing(item);
                                                    setIsModalOpen(true);
                                                }}
                                                className="cursor-pointer"
                                            >
                                                <Edit className="mr-2 h-4 w-4" />
                                                Edit
                                            </DropdownMenuItem>
                                            <DropdownMenuItem
                                                onClick={(e) => {
                                                    e.stopPropagation();
                                                    setAnnouncements((prev) => prev.filter((a) => a.id !== item.id));
                                                }}
                                                className="cursor-pointer text-red-600 focus:text-red-600"
                                            >
                                                <Trash2 className="mr-2 h-4 w-4" />
                                                Delete
                                            </DropdownMenuItem>
                                        </DropdownMenuContent>
                                    </DropdownMenu>
                                </div>
                            </div>

                            {/* Content - Flexible area */}
                            <div className="flex flex-1 flex-col p-4">
                                <div className="mb-3">
                                    <h3 className="line-clamp-2 text-lg font-semibold text-gray-900 transition-colors group-hover:text-brand-800">
                                        {item.title}
                                    </h3>
                                </div>

                                <p className="flex-1 text-sm leading-relaxed text-gray-600">
                                    {item.excerpt && item.excerpt.length > 120 ? item.excerpt.slice(0, 120) + '...' : item.excerpt}
                                </p>

                                {/* Footer - Fixed at bottom */}
                                <div className="mt-4 flex h-12 items-center justify-between border-t border-gray-100 pt-3">
                                    <div className="flex items-center">
                                        <span className="text-xs font-medium text-gray-500">
                                            {new Date(item.date).toLocaleDateString('en-US', {
                                                month: 'short',
                                                day: 'numeric',
                                                year: 'numeric',
                                            })}
                                        </span>
                                    </div>

                                    <div className="flex items-center gap-2">
                                        <button
                                            className="group/like flex items-center gap-1 rounded-lg px-2 py-1 text-sm text-gray-600 transition-all hover:bg-brand-50 hover:text-brand-600"
                                            onClick={(e) => {
                                                e.stopPropagation();
                                                setAnnouncements((prev) =>
                                                    prev.map((a) => (a.id === item.id ? { ...a, likes: (a.likes || 0) + 1 } : a)),
                                                );
                                            }}
                                        >
                                            <Eye className="h-4 w-4 transition-transform group-hover/like:scale-110" />
                                            <span className="font-medium">{item.likes ?? 0}</span>
                                        </button>
                                    </div>
                                </div>
                            </div>
                        </div>
                    ))}
                </div>

                <AnnouncementAddModal
                    isOpen={isModalOpen}
                    setIsOpen={setIsModalOpen}
                    mode={modalMode}
                    initialAnnouncement={
                        modalMode === 'edit' && editing
                            ? {
                                  id: editing.id,
                                  title: editing.title,
                                  date: editing.date,
                                  description: editing.description,
                                  coverImage: editing.coverImage ?? undefined,
                              }
                            : undefined
                    }
                    onSubmit={(values) => {
                        if (modalMode === 'add') {
                            const next: Announcement = {
                                id: Date.now().toString(),
                                title: values.title,
                                excerpt: (values.description || '').slice(0, 120),
                                description: values.description || '',
                                date: values.date || new Date().toISOString(),
                                coverImage: values.coverImage as string | undefined,
                                likes: 0,
                                comments: 0,
                            };
                            setAnnouncements((prev) => [next, ...prev]);
                        } else if (modalMode === 'edit' && editing) {
                            setAnnouncements((prev) =>
                                prev.map((a) =>
                                    a.id === editing.id
                                        ? {
                                              ...a,
                                              title: values.title,
                                              description: values.description || '',
                                              excerpt: (values.description || '').slice(0, 120),
                                              date: values.date || a.date,
                                              coverImage: (values.coverImage as string) || a.coverImage,
                                          }
                                        : a,
                                ),
                            );
                        }
                        setIsModalOpen(false);
                    }}
                />

                {/* Announcement Details Modal */}
                <AnnouncementDetailsModal
                    isOpen={isDetailsModalOpen}
                    onClose={() => setIsDetailsModalOpen(false)}
                    announcement={selectedAnnouncement}
                    onEdit={() => {
                        if (selectedAnnouncement) {
                            setModalMode('edit');
                            setEditing(selectedAnnouncement);
                            setIsModalOpen(true);
                        }
                    }}
                />
            </div>
        </div>
    );
}
Index.layout = (page: ReactNode) => (
    <AppLayout
        breadcrumbs={[
            { title: 'Home', href: '/' },
            { title: 'News Feed', href: route('users.index') },
        ]}
        title="News Feed"
    >
        {page}
    </AppLayout>
);

export default Index;
