import { Injectable } from '@nestjs/common';
import { PrismaService } from '@core/database/prisma/prisma.service';
import { Prisma } from '@prisma/client';

export interface ReleaseNoteQueryParams {
  page: number;
  pageSize: number;
  keyword?: string;
}

@Injectable()
export class ReleaseNotesRepository {
  constructor(private readonly prisma: PrismaService) {}

  async findMany(params: ReleaseNoteQueryParams) {
    const { page, pageSize, keyword } = params;
    const where: any = {};

    if (keyword) {
      where.OR = [
        { title: { contains: keyword, mode: 'insensitive' } },
        { version: { contains: keyword, mode: 'insensitive' } },
      ];
    }

    const [items, total] = await this.prisma.$transaction([
      this.prisma.releaseNote.findMany({
        where,
        orderBy: [{ releasedAt: 'desc' }, { createdAt: 'desc' }],
        skip: (page - 1) * pageSize,
        take: pageSize,
      }),
      this.prisma.releaseNote.count({ where }),
    ]);

    return { items, total };
  }

  async findByVersion(version: string) {
    return this.prisma.releaseNote.findFirst({ where: { version } });
  }

  async create(data: {
    version: string;
    title: string;
    content?: Prisma.InputJsonValue;
    releasedAt: Date;
    createdBy: string;
  }) {
    return this.prisma.releaseNote.create({ data });
  }
}
