"use client";

/**
 * drawer-registry — maps each DrawerKey → { title, sub, content }, building the
 * content node from `analysis` (ParcelAnalysis) + optional `forecastReport`
 * (ForecastReport). PticaPageContent renders the matching entry inside a single
 * controlled <PticaDrawer>. Titles / subs mirror the prototype `data-title` /
 * `data-sub`.
 */

import type { ReactNode } from "react";

import type { ParcelAnalysis } from "@/types/site-finder";
import type { ForecastReport } from "@/types/forecast";
import type { DrawerKey } from "@/components/site-finder/ptica/drawers/drawer-keys";
import {
  PassportContent,
  BuildabilityContent,
  UrbanContent,
  RestrictionsContent,
  LegalContent,
  EngineeringContent,
  MarketContent,
  EnvironmentContent,
  GeorisksContent,
  RisksContent,
  ProductContent,
  PotentialContent,
  EconomyContent,
  FinanceContent,
  OksContent,
  InsolationContent,
  Future3dContent,
} from "@/components/site-finder/ptica/drawers/DrawerContent";

export interface DrawerEntry {
  title: string;
  sub: string;
  content: ReactNode;
}

export function getDrawerEntry(
  key: DrawerKey,
  analysis: ParcelAnalysis,
  forecastReport?: ForecastReport,
): DrawerEntry {
  switch (key) {
    case "passport":
      return {
        title: "Паспорт участка",
        sub: "Полные данные ЕГРН / НСПД",
        content: <PassportContent analysis={analysis} />,
      };
    case "buildability":
      return {
        title: "Buildability Index",
        sub: "Из чего складывается оценка · предв.",
        content: <BuildabilityContent analysis={analysis} />,
      };
    case "urban":
      return {
        title: "Градостроительство",
        sub: "ПЗЗ · регламент · НСПД",
        content: <UrbanContent analysis={analysis} />,
      };
    case "restrictions":
      return {
        title: "Ограничения · ЗОУИТ",
        sub: "Зоны с особыми условиями",
        content: <RestrictionsContent analysis={analysis} />,
      };
    case "engineering":
      return {
        title: "Инженерия",
        sub: "Точки подключения ресурсов",
        content: <EngineeringContent analysis={analysis} />,
      };
    case "market":
      return {
        title: "Рынок",
        sub: "Конкуренты · планировки · скорость · тренд",
        content: <MarketContent analysis={analysis} />,
      };
    case "economy":
      return {
        title: "Экономика",
        sub: "Предварительная оценка · после финмодели",
        content: <EconomyContent />,
      };
    case "risks":
      return {
        title: "Сводный риск",
        sub: "Композиция факторов · предв.",
        content: <RisksContent analysis={analysis} />,
      };
    case "georisks":
      return {
        title: "Геориски",
        sub: "Геология · гидрология · геотехника",
        content: <GeorisksContent analysis={analysis} />,
      };
    case "oks":
      return {
        title: "Объекты кап. строительства",
        sub: "ОКС на участке",
        content: <OksContent />,
      };
    case "potential":
      return {
        title: "Расчёт ёмкости",
        sub: "Плотность · пятно · продаваемая",
        content: <PotentialContent analysis={analysis} />,
      };
    case "product":
      return {
        title: "Продуктовая стратегия",
        sub: "Рекомендуемый класс и квартирография",
        content: <ProductContent forecastReport={forecastReport} />,
      };
    case "finance":
      return {
        title: "Финансовая модель",
        sub: "Investment Clearance",
        content: <FinanceContent analysis={analysis} />,
      };
    case "legal":
      return {
        title: "Правовой статус",
        sub: "Обременения, ограничения и регламент",
        content: <LegalContent analysis={analysis} />,
      };
    case "environment":
      return {
        title: "Среда · Экология",
        sub: "Шум · воздух · ветер · погода",
        content: <EnvironmentContent analysis={analysis} />,
      };
    case "insolation":
      return {
        title: "Инсоляционная матрица",
        sub: "Предпросмотр теней на 3D-массе · солнце по времени суток",
        content: <InsolationContent analysis={analysis} />,
      };
    case "future3d":
      return {
        title: "3D-масса застройки",
        sub: "Генеративная масса по регламенту · интерактивно",
        content: <Future3dContent analysis={analysis} />,
      };
  }
}
