part of '../analytic.dart';

@freezed
class InventoryAnalytic with _$InventoryAnalytic {
  const factory InventoryAnalytic({
    required InventorySummary summary,
    required List<InventoryProduct> products,
    required List<InventoryIngredient> ingredients,
  }) = _InventoryAnalytic;

  factory InventoryAnalytic.empty() => InventoryAnalytic(
    summary: InventorySummary.empty(),
    products: [],
    ingredients: [],
  );
}

@freezed
class InventorySummary with _$InventorySummary {
  const factory InventorySummary({
    required int totalProducts,
    required int totalIngredients,
    required int totalValue,
    required int lowStockProducts,
    required int lowStockIngredients,
    required int zeroStockProducts,
    required int zeroStockIngredients,
    required int totalSoldProducts,
    required int totalSoldIngredients,
    required String outletId,
    required String outletName,
    required String generatedAt,
  }) = _InventorySummary;

  factory InventorySummary.empty() => const InventorySummary(
    totalProducts: 0,
    totalIngredients: 0,
    totalValue: 0,
    lowStockProducts: 0,
    lowStockIngredients: 0,
    zeroStockProducts: 0,
    zeroStockIngredients: 0,
    totalSoldProducts: 0,
    totalSoldIngredients: 0,
    outletId: "",
    outletName: "",
    generatedAt: "",
  );
}

@freezed
class InventoryProduct with _$InventoryProduct {
  const factory InventoryProduct({
    required String id,
    required String productId,
    required String productName,
    required String categoryName,
    required int quantity,
    required int reorderLevel,
    required int unitCost,
    required int totalValue,
    required int totalIn,
    required int totalOut,
    required bool isLowStock,
    required bool isZeroStock,
    required String updatedAt,
  }) = _InventoryProduct;

  factory InventoryProduct.empty() => const InventoryProduct(
    id: "",
    productId: "",
    productName: "",
    categoryName: "",
    quantity: 0,
    reorderLevel: 0,
    unitCost: 0,
    totalValue: 0,
    totalIn: 0,
    totalOut: 0,
    isLowStock: false,
    isZeroStock: false,
    updatedAt: "",
  );
}

@freezed
class InventoryIngredient with _$InventoryIngredient {
  const factory InventoryIngredient({
    required String id,
    required String ingredientId,
    required String ingredientName,
    required String unitName,
    required int quantity,
    required int reorderLevel,
    required int unitCost,
    required int totalValue,
    required int totalIn,
    required int totalOut,
    required bool isLowStock,
    required bool isZeroStock,
    required String updatedAt,
  }) = _InventoryIngredient;

  factory InventoryIngredient.empty() => const InventoryIngredient(
    id: "",
    ingredientId: "",
    ingredientName: "",
    unitName: "",
    quantity: 0,
    reorderLevel: 0,
    unitCost: 0,
    totalValue: 0,
    totalIn: 0,
    totalOut: 0,
    isLowStock: false,
    isZeroStock: false,
    updatedAt: "",
  );
}
