// =============================================================================
// 🔄 УТИЛИТЫ ДЛЯ ТРАНСФОРМАЦИИ РЕЦЕПТУРЫ V1 → V2
// =============================================================================

import { RecipeType } from '@prisma/client'

export interface V1RecipeItem {
  productId: string
  quantity: number
  recipe: {
    services: string[]
    fulfillmentConsumables: string[]
    sellerConsumables: string[]
    marketplaceCardId: string | null
  }
}

export interface V2RecipeItem {
  productId: string
  quantity: number
  recipeType: RecipeType
}

export interface ProductRecipe {
  productId: string
  selectedServices: string[]
  selectedFFConsumables: string[]
  selectedSellerConsumables: string[]
  selectedWBCard?: string | null
}

/**
 * Трансформирует рецептуру из V1 формата (вложенная) в V2 формат (нормализованная)
 * @param items - Массив товаров с V1 рецептурой
 * @param productRecipes - Объект с рецептурами для каждого товара
 * @returns Массив нормализованных элементов рецептуры V2
 */
export function transformRecipeToV2(
  items: Array<{ productId: string; quantity: number }>,
  productRecipes: Record<string, ProductRecipe>,
): V2RecipeItem[] {
  const recipeItems: V2RecipeItem[] = []
  
  items.forEach(item => {
    // 1. Основной товар всегда добавляется как MAIN_PRODUCT
    recipeItems.push({
      productId: item.productId,
      quantity: item.quantity,
      recipeType: 'MAIN_PRODUCT' as RecipeType,
    })
    
    // 2. Получаем рецептуру для товара
    const recipe = productRecipes[item.productId]
    if (!recipe) return
    
    // 3. TODO: Услуги и расходники - временно отключены в V2
    // В V2 системе услуги и расходники должны быть записями в таблице Product
    // Пока что создаем только основные товары
    
    // 4. TODO: Добавить поддержку услуг когда будут созданы записи Product для Services
    // if (recipe.selectedServices?.length > 0) { ... }
    
    // 5. TODO: Добавить поддержку расходников когда будут созданы записи Product для Supplies  
    // if (recipe.selectedFFConsumables?.length > 0) { ... }
    
    // 6. Карточка маркетплейса пока не поддерживается в V2
    // TODO: Добавить поддержку marketplaceCardId когда будет готова модель
  })
  
  return recipeItems
}

/**
 * Адаптирует данные из V1 формата формы в V2 формат для мутации
 * @param v1Data - Данные в формате V1
 * @param productRecipes - Рецептуры товаров
 * @returns Данные в формате V2 для CreateSellerGoodsSupplyInput
 */
export function adaptV1ToV2Format(
  v1Data: {
    partnerId: string
    fulfillmentCenterId: string
    deliveryDate: string
    logisticsPartnerId: string | null
    notes: string
  },
  items: Array<{ productId: string; quantity: number }>,
  productRecipes: Record<string, ProductRecipe>,
) {
  return {
    supplierId: v1Data.partnerId, // partnerId → supplierId
    fulfillmentCenterId: v1Data.fulfillmentCenterId,
    requestedDeliveryDate: v1Data.deliveryDate, // deliveryDate → requestedDeliveryDate
    logisticsPartnerId: v1Data.logisticsPartnerId,
    notes: v1Data.notes,
    recipeItems: transformRecipeToV2(items, productRecipes),
  }
}

/**
 * Группирует нормализованные элементы рецептуры обратно для отображения
 * @param recipeItems - Нормализованные элементы V2
 * @returns Сгруппированные по типу элементы
 */
export function groupRecipeItemsByType(recipeItems: V2RecipeItem[]) {
  return {
    mainProducts: recipeItems.filter(item => item.recipeType === ('MAIN_PRODUCT' as RecipeType)),
    services: recipeItems.filter(item => item.recipeType === ('COMPONENT' as RecipeType)),
    consumables: recipeItems.filter(item => item.recipeType === ('ACCESSORY' as RecipeType) || item.recipeType === ('PACKAGING' as RecipeType)),
  }
}