import { Injectable } from "@nestjs/common";
import { PrismaService } from "../../common/prisma/prisma.service";

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

  list(userId: string) {
    return this.prisma.favorite.findMany({
      where: { userId, ad: { status: "PUBLISHED", provider: { isActive: true } } },
      orderBy: { createdAt: "desc" },
      include: {
        ad: {
          include: {
            provider: { select: { id: true, fullName: true, avatarUrl: true } },
            service: { select: { id: true, nameAr: true } },
          },
        },
      },
    });
  }

  async toggle(userId: string, adId: string): Promise<{ isFavorite: boolean }> {
    const existing = await this.prisma.favorite.findUnique({
      where: { userId_adId: { userId, adId } },
    });
    if (existing) {
      await this.prisma.favorite.delete({
        where: { userId_adId: { userId, adId } },
      });
      return { isFavorite: false };
    }
    const ad = await this.prisma.serviceAd.findFirst({ where: { id: adId, status: "PUBLISHED", provider: { isActive: true } }, select: { id: true } });
    if (!ad) return { isFavorite: false };
    await this.prisma.favorite.create({ data: { userId, adId } });
    return { isFavorite: true };
  }

  async check(userId: string, adId: string): Promise<{ isFavorite: boolean }> {
    const existing = await this.prisma.favorite.findUnique({
      where: { userId_adId: { userId, adId } },
    });
    return { isFavorite: !!existing };
  }
}
