import { Head, Link } from '@inertiajs/react';
import {
    Calendar,
    CheckCircle2,
    Circle,
    Filter,
    MoreVertical,
    Plus,
    Search,
    Tag,
} from 'lucide-react';
import { useState } from 'react';

import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';
import {
    DropdownMenu,
    DropdownMenuContent,
    DropdownMenuItem,
    DropdownMenuLabel,
    DropdownMenuSeparator,
    DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu';
import { CreateTaskSheet } from '@/pages/tasks/components/CreateTaskSheet';
import { DeleteTaskDialog } from '@/pages/tasks/components/DeleteTaskDialog';
import { EditTaskSheet } from '@/pages/tasks/components/EditTaskSheet';

const DUMMY_TASKS = [
    {
        id: 1,
        title: 'Draft homepage wireframes',
        project: 'Website Redesign',
        projectSlug: 'website-redesign',
        status: 'In Progress',
        priority: 'High',
        dueDate: 'Oct 24, 2024',
        color: 'bg-blue-500',
    },
    {
        id: 2,
        title: 'Implement navigation',
        project: 'Website Redesign',
        projectSlug: 'website-redesign',
        status: 'Todo',
        priority: 'Medium',
        dueDate: 'Oct 26, 2024',
        color: 'bg-blue-500',
    },
    {
        id: 3,
        title: 'Setup Vite + React',
        project: 'Tasko Mobile App',
        projectSlug: 'tasko-mobile-app',
        status: 'Completed',
        priority: 'High',
        dueDate: 'Oct 12, 2024',
        color: 'bg-purple-500',
    },
    {
        id: 4,
        title: 'Define color palette',
        project: 'Website Redesign',
        projectSlug: 'website-redesign',
        status: 'Completed',
        priority: 'High',
        dueDate: 'Oct 15, 2024',
        color: 'bg-blue-500',
    },
];

export default function Tasks() {
    const [searchQuery, setSearchQuery] = useState('');
    const [selectedProject, setSelectedProject] = useState<string | null>(null);
    const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false);
    const [editingTask, setEditingTask] = useState<any>(null);
    const [deletingTask, setDeletingTask] = useState<any>(null);

    // Get unique projects for the filter
    const availableProjects = Array.from(
        new Set(DUMMY_TASKS.map((t) => t.project)),
    );

    const filteredTasks = DUMMY_TASKS.filter((task) => {
        const matchesSearch = task.title
            .toLowerCase()
            .includes(searchQuery.toLowerCase());
        const matchesProject =
            !selectedProject || task.project === selectedProject;

        return matchesSearch && matchesProject;
    });

    const activeTasks = filteredTasks.filter((t) => t.status !== 'Completed');
    const completedTasks = filteredTasks.filter(
        (t) => t.status === 'Completed',
    );

    return (
        <>
            <Head title="Tasks" />

            <div className="flex h-full flex-1 flex-col gap-6 p-4 md:p-8">
                {/* Header Area */}
                <div className="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
                    <div>
                        <h1 className="bg-linear-to-br from-foreground to-foreground/70 bg-clip-text text-3xl font-extrabold tracking-tight text-foreground">
                            My Tasks
                        </h1>
                        <p className="mt-1 text-sm text-muted-foreground">
                            Manage all your assigned tasks across multiple
                            projects.
                        </p>
                    </div>
                    <Button
                        onClick={() => setIsCreateDialogOpen(true)}
                        className="h-10 rounded-xl border-none bg-linear-to-r from-blue-600 to-indigo-600 font-bold shadow-lg shadow-blue-500/25 transition-all hover:scale-[1.02] hover:from-blue-700 hover:to-indigo-700"
                    >
                        <Plus className="mr-2 h-4 w-4" /> Create Task
                    </Button>
                </div>

                {/* Filters & Actions */}
                <div className="flex flex-col items-center justify-between gap-4 rounded-2xl border bg-white p-2 sm:flex-row dark:bg-neutral-900/50">
                    <div className="relative w-full max-w-sm flex-1">
                        <div className="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3">
                            <Search className="h-4 w-4 text-muted-foreground" />
                        </div>
                        <input
                            type="text"
                            placeholder="Search tasks..."
                            value={searchQuery}
                            onChange={(e) => setSearchQuery(e.target.value)}
                            className="h-10 w-full rounded-xl border border-transparent bg-neutral-50 pr-4 pl-10 text-sm outline-hidden transition-all focus:border-blue-500 focus:ring-4 focus:ring-blue-500/10 dark:bg-neutral-800"
                        />
                    </div>
                    <div className="flex items-center gap-2">
                        <DropdownMenu>
                            <DropdownMenuTrigger asChild>
                                <Button
                                    variant="outline"
                                    className={`rounded-xl border-dashed ${selectedProject ? 'border-blue-500 bg-blue-50 text-blue-600 dark:bg-blue-900/10' : ''}`}
                                >
                                    <Filter className="mr-2 h-4 w-4" />
                                    {selectedProject || 'Filter by Project'}
                                </Button>
                            </DropdownMenuTrigger>
                            <DropdownMenuContent
                                align="end"
                                className="w-56 rounded-xl border"
                            >
                                <DropdownMenuLabel>Projects</DropdownMenuLabel>
                                <DropdownMenuSeparator />
                                <DropdownMenuItem
                                    onClick={() => setSelectedProject(null)}
                                    className="cursor-pointer font-medium"
                                >
                                    All Projects
                                </DropdownMenuItem>
                                {availableProjects.map((project) => (
                                    <DropdownMenuItem
                                        key={project}
                                        onClick={() =>
                                            setSelectedProject(project)
                                        }
                                        className="cursor-pointer"
                                    >
                                        {project}
                                    </DropdownMenuItem>
                                ))}
                            </DropdownMenuContent>
                        </DropdownMenu>
                        <Button
                            variant="outline"
                            className="rounded-xl border-dashed"
                        >
                            <Tag className="mr-2 h-4 w-4" /> Labels
                        </Button>
                    </div>
                </div>

                {/* Task List */}
                <div className="space-y-4">
                    {/* Active Tasks Group */}
                    <div className="space-y-3">
                        <h3 className="px-2 text-xs font-bold tracking-wider text-muted-foreground uppercase">
                            Active Tasks
                        </h3>
                        <div className="grid gap-3">
                            {activeTasks.length > 0 ? (
                                activeTasks.map((task) => (
                                    <div
                                        key={task.id}
                                        className="group flex items-center justify-between rounded-2xl border bg-white p-4 transition-all hover:border-blue-300 hover:shadow-md dark:bg-neutral-900 dark:hover:border-blue-900"
                                    >
                                        <div className="flex items-center gap-4">
                                            <button className="text-neutral-300 transition-colors hover:text-blue-500">
                                                <Circle className="h-6 w-6" />
                                            </button>
                                            <div>
                                                <h4 className="text-sm font-bold text-foreground transition-colors group-hover:text-blue-600">
                                                    {task.title}
                                                </h4>
                                                <div className="mt-1 flex items-center gap-2">
                                                    <div
                                                        className={`h-1.5 w-1.5 rounded-full ${task.color}`}
                                                    />
                                                    <Link
                                                        href={`/projects/${task.projectSlug}`}
                                                        className="text-xs text-neutral-500 hover:text-blue-500"
                                                    >
                                                        {task.project}
                                                    </Link>
                                                    <span className="text-[10px] text-neutral-400">
                                                        •
                                                    </span>
                                                    <span className="flex items-center gap-1 text-[10px] font-medium text-neutral-400">
                                                        <Calendar size={12} />{' '}
                                                        {task.dueDate}
                                                    </span>
                                                </div>
                                            </div>
                                        </div>
                                        <div className="flex items-center gap-3">
                                            <Badge
                                                variant="outline"
                                                className={`rounded-lg capitalize ${
                                                    task.priority === 'High'
                                                        ? 'border-red-100 bg-red-50 text-red-600 dark:border-red-900/40 dark:bg-red-900/20'
                                                        : 'border-orange-100 bg-orange-50 text-orange-600 dark:border-orange-900/40 dark:bg-orange-900/20'
                                                }`}
                                            >
                                                {task.priority}
                                            </Badge>
                                            <DropdownMenu>
                                                <DropdownMenuTrigger asChild>
                                                    <Button
                                                        variant="ghost"
                                                        size="icon"
                                                        className="h-9 w-9 rounded-xl"
                                                    >
                                                        <MoreVertical
                                                            size={18}
                                                        />
                                                    </Button>
                                                </DropdownMenuTrigger>
                                                <DropdownMenuContent
                                                    align="end"
                                                    className="rounded-xl border"
                                                >
                                                    <DropdownMenuItem
                                                        onClick={() =>
                                                            setEditingTask(task)
                                                        }
                                                        className="cursor-pointer gap-2"
                                                    >
                                                        Edit Task
                                                    </DropdownMenuItem>
                                                    <DropdownMenuItem
                                                        onClick={() =>
                                                            setDeletingTask(
                                                                task,
                                                            )
                                                        }
                                                        className="cursor-pointer gap-2 text-red-600"
                                                    >
                                                        Delete Task
                                                    </DropdownMenuItem>
                                                </DropdownMenuContent>
                                            </DropdownMenu>
                                        </div>
                                    </div>
                                ))
                            ) : (
                                <div className="rounded-2xl border-2 border-dashed border-neutral-200 bg-neutral-50 py-12 text-center dark:border-neutral-800 dark:bg-neutral-900/20">
                                    <p className="text-sm text-muted-foreground">
                                        No active tasks found matching your
                                        filters.
                                    </p>
                                </div>
                            )}
                        </div>
                    </div>

                    {/* Completed Tasks Group */}
                    <div className="space-y-3 pt-4">
                        <h3 className="px-2 text-xs font-bold tracking-wider text-neutral-400 uppercase">
                            Completed
                        </h3>
                        <div className="grid gap-3 opacity-60 grayscale transition-all duration-300 hover:opacity-100">
                            {completedTasks.length > 0 ? (
                                completedTasks.map((task) => (
                                    <div
                                        key={task.id}
                                        className="flex items-center justify-between rounded-2xl border border-transparent bg-neutral-50 p-4 dark:bg-neutral-800/10"
                                    >
                                        <div className="flex items-center gap-4">
                                            <div className="text-green-500">
                                                <CheckCircle2 className="h-6 w-6" />
                                            </div>
                                            <div>
                                                <h4 className="text-sm font-medium text-neutral-500 line-through decoration-neutral-300">
                                                    {task.title}
                                                </h4>
                                                <div className="mt-1 flex items-center gap-2">
                                                    <span className="text-xs text-neutral-400 italic">
                                                        in {task.project}
                                                    </span>
                                                </div>
                                            </div>
                                        </div>
                                        <Button
                                            variant="ghost"
                                            size="icon"
                                            className="h-8 w-8 rounded-lg"
                                        >
                                            <MoreVertical size={16} />
                                        </Button>
                                    </div>
                                ))
                            ) : searchQuery || selectedProject ? (
                                <p className="py-4 text-center text-xs text-muted-foreground">
                                    No completed tasks match your filters.
                                </p>
                            ) : null}
                        </div>
                    </div>
                </div>

                <CreateTaskSheet
                    open={isCreateDialogOpen}
                    onOpenChange={setIsCreateDialogOpen}
                    projects={availableProjects}
                />

                <EditTaskSheet
                    task={editingTask}
                    open={!!editingTask}
                    onOpenChange={(open) => !open && setEditingTask(null)}
                    projects={availableProjects}
                />

                <DeleteTaskDialog
                    taskTitle={deletingTask?.title || ''}
                    open={!!deletingTask}
                    onOpenChange={(open) => !open && setDeletingTask(null)}
                />
            </div>
        </>
    );
}

Tasks.layout = {
    breadcrumbs: [
        {
            title: 'Tasks',
            href: tasks(),
        },
    ],
};
