import type { PrismaClient } from '../../src/generated/prisma/client';

const DEFAULT_ISSUE_STATUSES: { name: string; code: string }[] = [
  { name: 'Draft', code: 'DRAFT' },
  { name: 'Saved', code: 'SAVED' },
  { name: 'New Submission', code: 'NEW_SUBMISSION' },
  { name: 'In Progress', code: 'IN_PROGRESS' },
  { name: 'Solved', code: 'SOLVED' },
  { name: 'Not Addressed', code: 'NOT_ADDRESSED' },
];

const DEFAULT_ISSUE_CATEGORIES = [
  'General',
  'Trade',
  'Policy',
  'Taxation',
  'Climate',
  'Procedure',
  'Market Access',
  'Communication',
  'Customs',
  'Digital / IT',
  'Finance',
  'Gender',
  'Governance',
  'Human Resources',
  'Infrastructure',
  'Legislation',
  'Licensing',
  'Regulation',
  'Security',
  'Strategy',
];

export async function seedIssueStatuses(
  prisma: PrismaClient,
  ownerUserId: number | null,
) {
  if (ownerUserId) {
    for (const status of DEFAULT_ISSUE_STATUSES) {
      const existingStatus = await prisma.issueStatuses.findFirst({
        where: { name: status.name, deletedAt: null },
        select: { id: true },
      });

      if (!existingStatus) {
        await prisma.issueStatuses.create({
          data: {
            name: status.name,
            code: status.code,
            userId: ownerUserId,
          },
        });
      }
    }

    for (const name of DEFAULT_ISSUE_CATEGORIES) {
      const existingCategory = await prisma.categories.findFirst({
        where: { name, deletedAt: null },
        select: { id: true },
      });

      if (!existingCategory) {
        await prisma.categories.create({
          data: {
            name,
            userId: ownerUserId,
          },
        });
      }
    }
  }

  return {
    categoryNames: DEFAULT_ISSUE_CATEGORIES,
    statusNames: DEFAULT_ISSUE_STATUSES.map((status) => status.name),
  };
}
