import { Head, setLayoutProps } from '@inertiajs/react';
import { Search } from 'lucide-react';
import { useMemo, useState } from 'react';

import { DivisionHeader } from '@/components/divisions/DivisionHeader';
import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';
import { Input } from '@/components/ui/input';
import {
    Table,
    TableBody,
    TableCell,
    TableHead,
    TableHeader,
    TableRow,
} from '@/components/ui/table';
import { avatarUrl, getInitials } from '@/lib/utils';
import { index as divisionsIndex } from '@/routes/divisions';
import type { DivisionMember, DivisionSecondaryData } from '@/types/division';

interface DivisionShowProps {
    data: {
        primary: {
            projects: unknown[];
            active_schedule: {
                act: string;
                tasks: unknown[];
            };
            tasks: {
                act: string;
                tasks: unknown[];
            };
        };
        secondary: DivisionSecondaryData & {
            members: {
                act: string;
                members: DivisionMember[];
            };
        };
    };
}

export default function DivisionsShowMembers({ data }: DivisionShowProps) {
    const { base_info, members } = data.secondary;

    const [memberSearchQuery, setMemberSearchQuery] = useState('');

    const filteredMembers = useMemo(() => {
        let result = [...(members.members || [])];

        if (memberSearchQuery) {
            const query = memberSearchQuery.toLowerCase();
            result = result.filter(
                (m) =>
                    m.user_name.toLowerCase().includes(query) ||
                    (m.role_label &&
                        m.role_label.toLowerCase().includes(query)),
            );
        }

        return result;
    }, [members.members, memberSearchQuery]);

    setLayoutProps({
        breadcrumbs: [
            {
                title: 'Divisions',
                href: divisionsIndex().url,
            },
            {
                title: base_info.name,
            },
            {
                title: 'Members',
            },
        ],
    });

    return (
        <>
            <Head title={`${base_info.name} - Members`} />

            <div className="flex min-h-full flex-col bg-muted/50">
                {/* Division Header */}
                <DivisionHeader baseInfo={base_info} />

                {/* Main Content Area */}
                <div className="px-5">
                    <div className="mx-auto w-full pb-8">
                        <section className="space-y-4">
                            <div className="space-y-3">
                                <div className="flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between">
                                    <h1 className="text-xl font-bold tracking-tight text-foreground">
                                        Division Members
                                    </h1>
                                    <div className="relative w-full sm:w-80">
                                        <Search
                                            className="absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 text-muted-foreground"
                                            size={16}
                                        />
                                        <Input
                                            placeholder="Search members..."
                                            className="h-9 rounded-lg bg-background pl-9"
                                            value={memberSearchQuery}
                                            onChange={(e) =>
                                                setMemberSearchQuery(
                                                    e.target.value,
                                                )
                                            }
                                        />
                                    </div>
                                </div>

                                <div className="overflow-hidden rounded-lg border bg-background">
                                    {filteredMembers.length > 0 ? (
                                        <Table>
                                            <TableHeader>
                                                <TableRow className="hover:bg-transparent">
                                                    <TableHead className="w-12 text-center">
                                                        NO.
                                                    </TableHead>
                                                    <TableHead>
                                                        Member
                                                    </TableHead>
                                                    <TableHead>
                                                        Jabatan
                                                    </TableHead>
                                                </TableRow>
                                            </TableHeader>
                                            <TableBody>
                                                {filteredMembers.map(
                                                    (member, index) => (
                                                        <TableRow
                                                            key={member.user_id}
                                                            className="group hover:bg-muted/50"
                                                        >
                                                            <TableCell className="text-center font-mono text-xs font-medium text-muted-foreground">
                                                                {index + 1}.
                                                            </TableCell>
                                                            <TableCell>
                                                                <div className="flex items-center gap-3">
                                                                    <Avatar className="h-8 w-8 shrink-0 border">
                                                                        <AvatarImage
                                                                            src={avatarUrl(
                                                                                member.avatar,
                                                                            )}
                                                                            alt=""
                                                                        />
                                                                        <AvatarFallback className="bg-muted text-[10px] font-bold text-muted-foreground">
                                                                            {getInitials(
                                                                                member.user_name,
                                                                            )}
                                                                        </AvatarFallback>
                                                                    </Avatar>
                                                                    <span className="font-semibold text-foreground">
                                                                        {
                                                                            member.user_name
                                                                        }
                                                                    </span>
                                                                </div>
                                                            </TableCell>
                                                            <TableCell className="text-sm font-medium text-muted-foreground">
                                                                {
                                                                    member.role_label
                                                                }
                                                            </TableCell>
                                                        </TableRow>
                                                    ),
                                                )}
                                            </TableBody>
                                        </Table>
                                    ) : (
                                        <div className="flex flex-col items-center justify-center py-12 text-center text-muted-foreground">
                                            <div className="mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-muted">
                                                <Search className="h-6 w-6" />
                                            </div>
                                            <p className="font-medium">
                                                No members found matching your
                                                filters.
                                            </p>
                                        </div>
                                    )}
                                </div>
                            </div>
                        </section>
                    </div>
                </div>
            </div>
        </>
    );
}
