import { randomBytes } from 'crypto';
import prisma from '../lib/prisma';
import { AppError } from '../middleware/errorHandler';

export function generatePortalToken(): string {
  return 'portal-tok-' + randomBytes(16).toString('hex');
}

export async function getPortalData(token: string) {
  const customer = await prisma.customer.findFirst({
    where: { portalToken: token, deletedAt: null },
    include: {
      vehicles: { where: { deletedAt: null } },
      orders: {
        orderBy: { createdAt: 'desc' },
        include: {
          vehicle: true,
          items: true,
          receipt: true,
        },
      },
    },
  });

  if (!customer) throw new AppError('Portal link not found or expired', 404);

  const currentOrder = customer.orders.find(
    (o) => !['paid', 'closed'].includes(o.status)
  );
  const history = customer.orders.filter((o) => ['paid', 'closed'].includes(o.status));

  const appointments = await prisma.appointment.findMany({
    where: { customerId: customer.id, status: { in: ['pending', 'confirmed'] } },
    orderBy: [{ date: 'asc' }, { slot: 'asc' }],
    include: { service: { select: { name: true, price: true, durationMin: true } } },
  });

  return { customer, currentOrder: currentOrder || null, history, appointments };
}
