import { ProjectShell } from "@/components/layout/project-shell";
import { query } from "@/lib/db-postgres";

interface ProjectData {
  name: string;
  description?: string;
  status?: string;
  progress?: number;
  discoveryPhase?: number;
  capturedData?: Record<string, string>;
  createdAt?: string;
  updatedAt?: string;
  featureCount?: number;
  creationMode?: "fresh" | "chat-import" | "code-import" | "migration";
}

async function getProjectData(projectId: string): Promise<ProjectData> {
  try {
    const rows = await query<{ data: any; created_at?: string; updated_at?: string }>(
      `SELECT data, created_at, updated_at FROM fs_projects WHERE id = $1 LIMIT 1`,
      [projectId]
    );
    if (rows.length > 0) {
      const { data, created_at, updated_at } = rows[0];
      return {
        name: data?.productName || data?.name || "Project",
        description: data?.productVision || data?.description,
        status: data?.status,
        progress: data?.progress ?? 0,
        discoveryPhase: data?.discoveryPhase ?? 0,
        capturedData: data?.capturedData ?? {},
        createdAt: created_at,
        updatedAt: updated_at,
        featureCount: Array.isArray(data?.features) ? data.features.length : (data?.featureCount ?? 0),
        creationMode: data?.creationMode ?? "fresh",
      };
    }
  } catch (error) {
    console.error("Error fetching project:", error);
  }
  return { name: "Project" };
}

export default async function ProjectLayout({
  children,
  params,
}: {
  children: React.ReactNode;
  params: Promise<{ workspace: string; projectId: string }>;
}) {
  const { workspace, projectId } = await params;
  const project = await getProjectData(projectId);

  return (
    <ProjectShell
      workspace={workspace}
      projectId={projectId}
      projectName={project.name}
      projectDescription={project.description}
      projectStatus={project.status}
      projectProgress={project.progress}
      discoveryPhase={project.discoveryPhase}
      capturedData={project.capturedData}
      createdAt={project.createdAt}
      updatedAt={project.updatedAt}
      featureCount={project.featureCount}
      creationMode={project.creationMode}
    >
      {children}
    </ProjectShell>
  );
}
