"use client";

import "@/styles/native.css";

/**
 * NativeLayer — JEDINSTVENA tačka montiranja native sloja.
 *
 * Mora da bude u ROOT layout-u (`app/layout.tsx`) jer root `/` rutu
 * servira `app/page.tsx` preko root layout-a, a NE preko
 * `(public)/[locale]/layout.tsx`. Ranije su native komponente bile samo
 * u [locale] layout-u, pa se na app home ekranu (`/`) ništa native nije
 * montiralo i video se čist web. Ovde pokrivamo SVE rute.
 *
 * Sve dole self-gate-uje na `Capacitor.isNativePlatform()` i CSS je
 * skopovan na `html[data-native="1"]`, pa je web bajt-identičan.
 */

import { usePathname } from "next/navigation";

import { CapacitorBootstrap } from "@/components/native/CapacitorBootstrap";
import { NativeShellController } from "@/components/native/NativeShellController";
import { NativeAppShell } from "@/components/native/NativeAppShell";
import { NativeBehaviors } from "@/components/native/NativeBehaviors";
import { NativePullToRefresh } from "@/components/native/NativePullToRefresh";
import { NativeRouteSkeleton } from "@/components/native/NativeRouteSkeleton";
import { NativeOfflineScreen } from "@/components/native/NativeOfflineScreen";
import { NativeRationaleHost } from "@/components/native/NativeRationaleHost";
import { NativeIntro } from "@/components/native/NativeIntro";
import { AppHome } from "@/components/native/screens/AppHome";
import { AppCompanyDetail } from "@/components/native/screens/AppCompanyDetail";
import { AppFinder } from "@/components/native/screens/AppFinder";
import { AppAccount } from "@/components/native/screens/AppAccount";
import { AppAuth } from "@/components/native/screens/AppAuth";
import { AppCatalog } from "@/components/native/screens/AppCatalog";
import { AppJobs } from "@/components/native/screens/AppJobs";
import { AppMagazine } from "@/components/native/screens/AppMagazine";
import { AppMagazineArticle } from "@/components/native/screens/AppMagazineArticle";
import { AppPartnerHome } from "@/components/native/screens/AppPartnerHome";
import { AppPartnerInbox } from "@/components/native/screens/AppPartnerInbox";
import { AppPartnerMessages } from "@/components/native/screens/AppPartnerMessages";
import { AppPartnerAds } from "@/components/native/screens/AppPartnerAds";
import { AppPartnerAccount } from "@/components/native/screens/AppPartnerAccount";
import { AppPartnerVerification } from "@/components/native/screens/AppPartnerVerification";
import { AppPartnerQuestions } from "@/components/native/screens/AppPartnerQuestions";
import { AppPartnerReviews } from "@/components/native/screens/AppPartnerReviews";
import { AppPartnerSections } from "@/components/native/screens/AppPartnerSections";
import { AppPartnerBookings } from "@/components/native/screens/AppPartnerBookings";
import { AppPartnerBoost } from "@/components/native/screens/AppPartnerBoost";
import { AppPartnerPlan } from "@/components/native/screens/AppPartnerPlan";
import { AppPartnerLeadExchange } from "@/components/native/screens/AppPartnerLeadExchange";
import { AppPartnerThread } from "@/components/native/screens/AppPartnerThread";
import { AppPartnerOnboarding } from "@/components/native/screens/AppPartnerOnboarding";
import { AppPartnerSettings } from "@/components/native/screens/AppPartnerSettings";
import { PartnerShell } from "@/components/native/PartnerShell";
import { AdminShell } from "@/components/native/AdminShell";
import { AppAdminDashboard } from "@/components/native/screens/AppAdminDashboard";
import { AppAdminChat } from "@/components/native/screens/AppAdminChat";
import { AppAdminChatThread } from "@/components/native/screens/AppAdminChatThread";
import { AppAdminSubmissions } from "@/components/native/screens/AppAdminSubmissions";
import { AppAdminInvoices } from "@/components/native/screens/AppAdminInvoices";
import { AppAdminClients } from "@/components/native/screens/AppAdminClients";
import { useAppVariant } from "@/lib/native/app-variant";
import { usePartnerPreview } from "@/lib/native/preview-partner";
import { useAdminPreview } from "@/lib/native/preview-admin";
import { getDictionary, type Locale } from "@/lib/i18n/i18n";

export function NativeLayer() {
  const pathname = usePathname() || "/";
  const locale: Locale = pathname === "/en" || pathname.startsWith("/en/")
    ? "en"
    : "sr";
  const dictionary = getDictionary(locale) as unknown as Record<string, string>;

  const variant = useAppVariant();
  const preview = usePartnerPreview();
  const adminPreview = useAdminPreview();
  // U preview modu ne renderujemo consumer shell — preview stranica daje
  // svoju tab navigaciju iznad ekrana.
  const isConsumer =
    variant === "consumer" && !preview.enabled && !adminPreview.enabled;
  // Ljuska se montira i u browser preview-u — bez nje se partner ekrani vide
  // bez topbar-a i tab trake (pa ni badge nepročitanog), što ne odgovara app-u.
  const isPartner = variant === "partner" || preview.enabled;
  // Admin ljuska se montira i u browser preview-u: bez nje se admin ekrani
  // vide bez topbar-a/tab trake, pa audit ne bi pokazao pravi izgled app-a.
  const isAdmin = variant === "admin" || adminPreview.enabled;

  return (
    <>
      <NativeIntro />
      <CapacitorBootstrap />
      <NativeShellController />

      {/* Consumer ljuska + ekrani — samo u consumer varijanti. */}
      {isConsumer ? (
        <NativeAppShell locale={locale} dictionary={dictionary} />
      ) : null}

      {/* Partner ljuska — samo u partner varijanti (klijentski portal). */}
      <PartnerShell
        locale={locale}
        dictionary={dictionary}
        active={isPartner}
      />

      {/* Admin ljuska — samo u admin varijanti (interni ops). */}
      <AdminShell
        locale={locale}
        dictionary={dictionary}
        active={isAdmin}
      />

      <NativeBehaviors />
      <NativePullToRefresh />
      <NativeRouteSkeleton />
      <NativeOfflineScreen dictionary={dictionary} />
      <NativeRationaleHost />

      {isConsumer ? (
        <>
          <AppHome locale={locale} dictionary={dictionary} />
          <AppFinder locale={locale} dictionary={dictionary} />
          <AppAccount locale={locale} dictionary={dictionary} />
          <AppAuth locale={locale} dictionary={dictionary} />
          <AppCatalog locale={locale} dictionary={dictionary} />
          <AppJobs locale={locale} dictionary={dictionary} />
          <AppMagazine locale={locale} dictionary={dictionary} />
          <AppMagazineArticle locale={locale} dictionary={dictionary} />
          <AppCompanyDetail locale={locale} dictionary={dictionary} />
        </>
      ) : null}

      {/* Admin native overlay ekrani — interno gejtovani na variant=admin + rutu. */}
      {isAdmin ? (
        <>
          <AppAdminDashboard locale={locale} dictionary={dictionary} />
          <AppAdminChat locale={locale} dictionary={dictionary} />
          <AppAdminChatThread locale={locale} dictionary={dictionary} />
          <AppAdminSubmissions locale={locale} dictionary={dictionary} />
          <AppAdminInvoices locale={locale} dictionary={dictionary} />
          <AppAdminClients locale={locale} dictionary={dictionary} />
        </>
      ) : null}

      {/*
       * Partner native overlay ekrani — gejtuju se interno na (varijantu+rutu)
       * ILI na browser preview flag (?previewPartner=…). Zato ih mount-ujemo
       * bezuslovno: svaki ekran sam vraća null kad nije aktivan.
       */}
      <AppPartnerHome locale={locale} dictionary={dictionary} />
      <AppPartnerInbox locale={locale} dictionary={dictionary} />
      <AppPartnerMessages locale={locale} dictionary={dictionary} />
      <AppPartnerAds locale={locale} dictionary={dictionary} />
      <AppPartnerAccount locale={locale} dictionary={dictionary} />
      <AppPartnerVerification locale={locale} dictionary={dictionary} />
      <AppPartnerQuestions locale={locale} dictionary={dictionary} />
      <AppPartnerReviews locale={locale} dictionary={dictionary} />
      <AppPartnerSections locale={locale} dictionary={dictionary} />
      <AppPartnerBookings locale={locale} dictionary={dictionary} />
      <AppPartnerBoost locale={locale} dictionary={dictionary} />
      <AppPartnerPlan locale={locale} dictionary={dictionary} />
      <AppPartnerLeadExchange locale={locale} dictionary={dictionary} />
      <AppPartnerThread locale={locale} dictionary={dictionary} />
      <AppPartnerSettings locale={locale} dictionary={dictionary} />
      <AppPartnerOnboarding locale={locale} dictionary={dictionary} />
    </>
  );
}
