import prisma from "./prisma";

type Resource = "services" | "testimonials" | "faqs" | "service-areas" | "gallery" | "why-choose-us";

export function isValidResource(resource: string): resource is Resource {
  return ["services", "testimonials", "faqs", "service-areas", "gallery", "why-choose-us"].includes(resource);
}

export async function findMany(resource: Resource) {
  switch (resource) {
    case "services":
      return prisma.service.findMany({ orderBy: { sortOrder: "asc" } });
    case "testimonials":
      return prisma.testimonial.findMany({ orderBy: { sortOrder: "asc" } });
    case "faqs":
      return prisma.fAQ.findMany({ orderBy: { sortOrder: "asc" } });
    case "service-areas":
      return prisma.serviceArea.findMany({ orderBy: { sortOrder: "asc" } });
    case "gallery":
      return prisma.galleryItem.findMany({ orderBy: { sortOrder: "asc" } });
    case "why-choose-us":
      return prisma.whyChooseUs.findMany({ orderBy: { sortOrder: "asc" } });
  }
}

export async function createItem(resource: Resource, data: Record<string, unknown>) {
  switch (resource) {
    case "services":
      return prisma.service.create({ data: data as Parameters<typeof prisma.service.create>[0]["data"] });
    case "testimonials":
      return prisma.testimonial.create({ data: data as Parameters<typeof prisma.testimonial.create>[0]["data"] });
    case "faqs":
      return prisma.fAQ.create({ data: data as Parameters<typeof prisma.fAQ.create>[0]["data"] });
    case "service-areas":
      return prisma.serviceArea.create({ data: data as Parameters<typeof prisma.serviceArea.create>[0]["data"] });
    case "gallery":
      return prisma.galleryItem.create({ data: data as Parameters<typeof prisma.galleryItem.create>[0]["data"] });
    case "why-choose-us":
      return prisma.whyChooseUs.create({ data: data as Parameters<typeof prisma.whyChooseUs.create>[0]["data"] });
  }
}

export async function updateItem(resource: Resource, id: string, data: Record<string, unknown>) {
  switch (resource) {
    case "services":
      return prisma.service.update({ where: { id }, data: data as Parameters<typeof prisma.service.update>[0]["data"] });
    case "testimonials":
      return prisma.testimonial.update({ where: { id }, data: data as Parameters<typeof prisma.testimonial.update>[0]["data"] });
    case "faqs":
      return prisma.fAQ.update({ where: { id }, data: data as Parameters<typeof prisma.fAQ.update>[0]["data"] });
    case "service-areas":
      return prisma.serviceArea.update({ where: { id }, data: data as Parameters<typeof prisma.serviceArea.update>[0]["data"] });
    case "gallery":
      return prisma.galleryItem.update({ where: { id }, data: data as Parameters<typeof prisma.galleryItem.update>[0]["data"] });
    case "why-choose-us":
      return prisma.whyChooseUs.update({ where: { id }, data: data as Parameters<typeof prisma.whyChooseUs.update>[0]["data"] });
  }
}

export async function deleteItem(resource: Resource, id: string) {
  switch (resource) {
    case "services":
      return prisma.service.delete({ where: { id } });
    case "testimonials":
      return prisma.testimonial.delete({ where: { id } });
    case "faqs":
      return prisma.fAQ.delete({ where: { id } });
    case "service-areas":
      return prisma.serviceArea.delete({ where: { id } });
    case "gallery":
      return prisma.galleryItem.delete({ where: { id } });
    case "why-choose-us":
      return prisma.whyChooseUs.delete({ where: { id } });
  }
}
