import { prisma } from '../config/database';
import { Jurusan, StatusPendaftaran } from '@prisma/client';

export const profileRepository = {
  async findByUserId(userId: number) {
    return prisma.profile.findUnique({ where: { userId } });
  },

  async upsert(
    userId: number,
    data: {
      fullName?: string;
      phoneNumber?: string | null;
      address?: string | null;
      asalSekolah?: string | null;
      jurusan?: Jurusan | null;
      angkatan?: number | null;
      tempatLahir?: string | null;
      tanggalLahir?: Date | null;
      jenisKelamin?: string | null;
    }
  ) {
    const existing = await prisma.profile.findUnique({ where: { userId } });
    if (existing) {
      return prisma.profile.update({ where: { userId }, data });
    }
    return prisma.profile.create({
      data: {
        userId,
        fullName: data.fullName ?? '',
        phoneNumber: data.phoneNumber ?? null,
        address: data.address ?? null,
        asalSekolah: data.asalSekolah ?? null,
        jurusan: data.jurusan ?? null,
        angkatan: data.angkatan ?? null,
        tempatLahir: data.tempatLahir ?? null,
        tanggalLahir: data.tanggalLahir ?? null,
        jenisKelamin: data.jenisKelamin ?? null,
      },
    });
  },

  async updateStatusPendaftaran(
    userId: number,
    status: StatusPendaftaran
  ) {
    return prisma.profile.update({
      where: { userId },
      data: { statusPendaftaran: status },
    });
  },

  async updateManyByUserIds(
    userIds: number[],
    status: StatusPendaftaran
  ) {
    return prisma.profile.updateMany({
      where: { userId: { in: userIds } },
      data: { statusPendaftaran: status },
    });
  },
};
