"use server";
import { prisma } from "@/lib/prisma";
import { revalidatePath } from "next/cache";

// ─── READ ────────────────────────────────────────────────────────────────────
export async function getCustomers() {
  try {
    const customers = await (prisma as any).customer.findMany({
      orderBy: { createdAt: "desc" },
      include: {
        addresses: true,
        _count: { select: { orders: true } },
      },
    });
    return customers;
  } catch { return []; }
}

export async function searchCustomers(q: string) {
  try {
    return await (prisma as any).customer.findMany({
      where: {
        OR: [
          { firstName: { contains: q } },
          { lastName: { contains: q } },
          { mobile: { contains: q } },
        ],
      },
      take: 20,
    });
  } catch { return []; }
}

export async function getCustomerById(id: string) {
  try {
    const customer = await (prisma as any).customer.findUnique({
      where: { id },
      include: {
        addresses: true,
        orders: {
          orderBy: { createdAt: "desc" },
          take: 20,
          include: { items: { include: { product: true } } },
        },
      },
    });
    if (!customer) return { success: false, customer: null };
    return { success: true, customer };
  } catch (e: any) {
    return { success: false, customer: null };
  }
}

// ─── CREATE ───────────────────────────────────────────────────────────────────
export async function createCustomer(data: any) {
  try {
    const existing = await (prisma as any).customer.findFirst({
      where: { mobile: data.mobile || data.phone },
    });
    if (existing) return { success: false, error: "این شماره موبایل قبلاً ثبت شده است." };

    const customer = await (prisma as any).customer.create({
      data: {
        firstName: data.firstName,
        lastName: data.lastName,
        mobile: data.mobile || data.phone || "",
        email: data.email || null,
        nationalCode: data.nationalCode || null,
        birthDate: data.birthDate ? new Date(data.birthDate) : null,
        address: data.address || null,
      },
    });
    revalidatePath("/admin/customers");
    return { success: true, customer, error: undefined };
  } catch (e: any) {
    return { success: false, error: "خطا در ثبت مشتری: " + e.message };
  }
}

// ─── UPDATE ───────────────────────────────────────────────────────────────────
export async function updateCustomer(id: string, data: any) {
  try {
    const customer = await (prisma as any).customer.update({
      where: { id },
      data: {
        firstName: data.firstName,
        lastName: data.lastName,
        mobile: data.mobile || data.phone,
        email: data.email || null,
        nationalCode: data.nationalCode || null,
        birthDate: data.birthDate ? new Date(data.birthDate) : null,
        address: data.address || null,
      },
    });
    revalidatePath("/admin/customers");
    return { success: true, customer, error: undefined };
  } catch (e: any) {
    return { success: false, error: "خطا در ویرایش مشتری." };
  }
}

// ─── DELETE ───────────────────────────────────────────────────────────────────
export async function deleteCustomer(id: string) {
  try {
    await (prisma as any).customer.delete({ where: { id } });
    revalidatePath("/admin/customers");
    return { success: true, error: undefined };
  } catch (e: any) {
    return { success: false, error: "این مشتری دارای سابقه سفارش است و قابل حذف نیست." };
  }
}

// ─── PUSH NOTIFICATION (STUB – Phase 5 with SMS) ─────────────────────────────
export async function dispatchPushNotification(id: string, data: any) {
  // Phase 5: SMS via Melipayamak
  return { success: true, successCount: 0, error: undefined };
}

export async function getPushHistory(customerId?: string) {
  return { success: true, history: [], error: undefined };
}
