import ServiceCategory from '../Features/services/schema/service-category.schema';
import ServiceItem from '../Features/services/schema/service-item.schema';

export const BOOKING_SERVICE_SEPARATOR = ' — ';

export function formatBookingServiceValue(categoryName: string, itemName: string) {
  return `${categoryName}${BOOKING_SERVICE_SEPARATOR}${itemName}`;
}

export function parseBookingServiceValue(value: string) {
  const normalized = String(value || '').trim();
  const idx = normalized.indexOf(BOOKING_SERVICE_SEPARATOR);
  if (idx === -1) return null;

  const categoryName = normalized.slice(0, idx).trim();
  const itemName = normalized.slice(idx + BOOKING_SERVICE_SEPARATOR.length).trim();
  if (!categoryName || !itemName) return null;

  return { categoryName, itemName };
}

export async function isPublishedBookingService(value: string) {
  const parsed = parseBookingServiceValue(value);
  if (!parsed) return false;

  const category = await ServiceCategory.findOne({
    name: parsed.categoryName,
    isPublished: true,
  }).lean();

  if (!category) return false;

  const item = await ServiceItem.findOne({
    categoryId: category._id,
    name: parsed.itemName,
    isPublished: true,
  }).lean();

  return Boolean(item);
}
