import { Eye, Play, Save } from "lucide-react";
import { BuildsView } from "../../features/builds/BuildsView";
import { OverlayPreview, OverlaySettings } from "../../features/overlay/OverlayViews";
import { ScanView } from "../../features/scan/ScanView";
import { TriageView } from "../../features/triage/TriageView";
import { AppMetrics, AppShell, AppSidebar, AppTopbar } from "../../features/layout";
import type { AppPageLayoutProps } from "./types";
import { useAppPageLayoutModel } from "./hooks/useAppPageLayoutModel";

export function AppPageLayout({ controller }: AppPageLayoutProps) {
  const {
    activeView,
    setActiveView,
    isOverlay,
    isScanning,
    snapshot,
    captureSources,
    selectedSourceId,
    setSelectedSourceId,
    latestCapture,
    topbarStatus,
    bridgeReady,
    canExportGood,
    canShowOverlay,
    metricCards,
    refreshCaptureSources,
    captureSelectedSource,
    exportCurrentGood,
    loadStoredArtifactSnapshot,
    showOverlay,
  } = controller;
  const { renderNavigation, handleDemoScan } = useAppPageLayoutModel({ controller });

  if (isOverlay) {
    return <OverlayPreview snapshot={snapshot} />;
  }

  return (
    <AppShell
      sidebar={<AppSidebar activeView={activeView} items={renderNavigation} onSelect={setActiveView} />}
      children={
        <>
          <AppTopbar
            topbarStatus={topbarStatus}
            canExportGood={canExportGood}
            canShowOverlay={canShowOverlay}
            isScanning={isScanning}
            artifactCount={snapshot.artifacts.length}
            onExportGood={exportCurrentGood}
            onShowOverlay={showOverlay}
            onDemoScan={handleDemoScan}
            exportIcon={<Save size={16} />}
            overlayIcon={<Eye size={16} />}
            demoIcon={<Play size={16} />}
          />
          <AppMetrics metricCards={metricCards} />
          {activeView === "scan" && (
            <ScanView
              isScanning={isScanning}
              snapshot={snapshot}
              captureSources={captureSources}
              selectedSourceId={selectedSourceId}
              setSelectedSourceId={setSelectedSourceId}
              latestCapture={latestCapture}
              captureStatus={topbarStatus}
              refreshCaptureSources={refreshCaptureSources}
              captureSelectedSource={captureSelectedSource}
              bridgeReady={bridgeReady}
              onStoredArtifactsChanged={loadStoredArtifactSnapshot}
            />
          )}
          {activeView === "triage" && <TriageView snapshot={snapshot} />}
          {activeView === "builds" && <BuildsView snapshot={snapshot} />}
          {activeView === "overlay" && <OverlaySettings canShowOverlay={canShowOverlay} onShowOverlay={showOverlay} />}
        </>
      }
    />
  );
}
