import Link from "next/link";
import { redirect } from "next/navigation";
import { format } from "date-fns";
import { Archive, PlusCircle, Share2, Wallet } from "lucide-react";

import { CaseList } from "@/components/dashboard/case-list";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { getServerAuthSession } from "@/lib/auth";
import { getCalculationsByUser } from "@/services/calculation.service";
import { getDashboardMetrics } from "@/services/dashboard-metrics";
import { formatCurrency } from "@/utils/formatting";

export default async function DashboardPage() {
  const session = await getServerAuthSession();
  if (!session?.user?.id) {
    redirect("/login");
  }

  const cases = await getCalculationsByUser(session.user.id);
  const appBaseUrl = process.env.NEXTAUTH_URL ?? "";
  const metrics = getDashboardMetrics(cases);

  return (
    <section className="mx-auto w-full max-w-7xl px-4 py-8 sm:px-6 lg:px-8">
      <div className="flex flex-wrap items-center justify-between gap-3">
        <div>
          <h1 className="text-2xl font-semibold text-emerald-950 sm:text-3xl">
            Case Management Dashboard
          </h1>
          <p className="mt-1 text-sm text-muted-foreground">
            Manage inheritance reports, download legal-style PDFs, and share read-only case links.
          </p>
        </div>
        <Button asChild className="bg-emerald-700 hover:bg-emerald-800">
          <Link href="/calculator">
            <PlusCircle className="size-4" />
            New Case
          </Link>
        </Button>
      </div>

      <div className="mt-6 grid gap-4 sm:grid-cols-2 lg:grid-cols-4">
        <Card>
          <CardHeader>
            <CardTitle className="flex items-center gap-2 text-sm">
              <Archive className="size-4 text-emerald-700" />
              Total Cases
            </CardTitle>
          </CardHeader>
          <CardContent className="text-2xl font-semibold text-emerald-900">
            {metrics.totalCases}
          </CardContent>
        </Card>
        <Card>
          <CardHeader>
            <CardTitle className="flex items-center gap-2 text-sm">
              <Wallet className="size-4 text-emerald-700" />
              Total Net Estate
            </CardTitle>
          </CardHeader>
          <CardContent className="text-lg font-semibold text-emerald-900">
            {formatCurrency(metrics.totalNetEstate, "USD")}
          </CardContent>
        </Card>
        <Card>
          <CardHeader>
            <CardTitle className="flex items-center gap-2 text-sm">
              <Share2 className="size-4 text-emerald-700" />
              Shared Reports
            </CardTitle>
          </CardHeader>
          <CardContent className="text-2xl font-semibold text-emerald-900">
            {metrics.sharedReports}
          </CardContent>
        </Card>
        <Card>
          <CardHeader>
            <CardTitle className="text-sm">Latest Activity</CardTitle>
          </CardHeader>
          <CardContent className="text-sm font-medium text-emerald-900">
            {metrics.latestUpdatedAt
              ? format(new Date(metrics.latestUpdatedAt), "PPP p")
              : "No case yet"}
          </CardContent>
        </Card>
      </div>

      <div className="mt-6">
        {cases.length === 0 ? (
          <Card>
            <CardContent className="flex flex-col items-center gap-3 py-12 text-center">
              <p className="text-base font-medium text-emerald-900">No cases available</p>
              <p className="text-sm text-muted-foreground">
                Start a new inheritance case to generate professional reports and share links.
              </p>
              <Badge variant="outline">Hanafi</Badge>
            </CardContent>
          </Card>
        ) : (
          <CaseList cases={cases} appBaseUrl={appBaseUrl} />
        )}
      </div>
    </section>
  );
}
