import { PrismaClient, TaskStage } from '@prisma/client';

/** Default internal statuses cloned onto every new project (README §5). */
export const DEFAULT_INTERNAL_STATUSES: Array<{
  text: string;
  color: string;
  stage: TaskStage;
  sortOrder: number;
}> = [
  { text: 'Created', color: '#6c757d', stage: TaskStage.Backlog, sortOrder: 1 },
  { text: 'Requirement Analysis', color: '#6f42c1', stage: TaskStage.Backlog, sortOrder: 2 },
  { text: 'Clarification Needed', color: '#fd7e14', stage: TaskStage.Backlog, sortOrder: 3 },
  { text: 'Ready for Development', color: '#0d6efd', stage: TaskStage.Backlog, sortOrder: 4 },
  { text: 'Development', color: '#0d6efd', stage: TaskStage.InProgress, sortOrder: 5 },
  { text: 'Unit Testing', color: '#6610f2', stage: TaskStage.InProgress, sortOrder: 6 },
  { text: 'Blocked', color: '#dc3545', stage: TaskStage.InProgress, sortOrder: 7 },
  { text: 'Code Review', color: '#6f42c1', stage: TaskStage.CodeReviewQA, sortOrder: 8 },
  { text: 'QA Testing', color: '#fd7e14', stage: TaskStage.CodeReviewQA, sortOrder: 9 },
  { text: 'Bug Fixing', color: '#dc3545', stage: TaskStage.CodeReviewQA, sortOrder: 10 },
  { text: 'Ready for Retest', color: '#ffc107', stage: TaskStage.CodeReviewQA, sortOrder: 11 },
  { text: 'Approved', color: '#198754', stage: TaskStage.Done, sortOrder: 12 },
  { text: 'Completed', color: '#198754', stage: TaskStage.Done, sortOrder: 13 },
  { text: 'Released', color: '#0d6efd', stage: TaskStage.Done, sortOrder: 14 },
];

/** Ensure every project has Done → Released (after Completed). Safe to re-run. */
export async function ensureReleasedInternalStatus(prisma: PrismaClient) {
  const projects = await prisma.project.findMany({ select: { id: true } });
  let created = 0;
  for (const p of projects) {
    const existing = await prisma.projectInternalStatus.findFirst({
      where: { projectId: p.id, text: 'Released' },
    });
    if (existing) continue;
    const agg = await prisma.projectInternalStatus.aggregate({
      where: { projectId: p.id },
      _max: { sortOrder: true },
    });
    const sortOrder = Math.max(14, (agg._max.sortOrder || 0) + 1);
    await prisma.projectInternalStatus.create({
      data: {
        projectId: p.id,
        text: 'Released',
        color: '#0d6efd',
        stage: TaskStage.Done,
        sortOrder,
        active: true,
      },
    });
    created += 1;
  }
  return { projects: projects.length, created };
}
