/**
 * Näringstyper. All beräkning sker i deterministisk kod (spec §21, §61.1) –
 * AI får aldrig hitta på näringsvärden. Värden presenteras alltid som
 * uppskattningar i UI.
 */

/** Makro- och mikronäringsvärden. Alla värden ≥ 0. */
export interface NutritionValues {
  /** kcal */
  kcal: number;
  /** gram */
  proteinG: number;
  /** gram */
  carbsG: number;
  /** gram */
  fatG: number;
  /** gram */
  saturatedFatG: number;
  /** gram */
  fiberG: number;
  /** gram */
  sugarG: number;
  /** gram salt (NaCl). natrium_mg = saltG * 400 */
  saltG: number;
  /** Utvalda mikronäringsämnen, valfria (spec §21) */
  micro?: MicroNutrients;
}

export interface MicroNutrients {
  vitaminDUg?: number;
  vitaminB12Ug?: number;
  vitaminCMg?: number;
  folateUg?: number;
  ironMg?: number;
  calciumMg?: number;
  zincMg?: number;
  magnesiumMg?: number;
  potassiumMg?: number;
  iodineUg?: number;
}

export type NutritionBasis = "per_100_g" | "per_100_ml" | "per_piece" | "per_portion";

/** Näringsdeklaration knuten till en bas (per 100 g/ml, per styck eller per portion). */
export interface NutritionDeclaration {
  basis: NutritionBasis;
  /** Vikt i gram för "per_piece"/"per_portion" så att omräkning är möjlig. */
  referenceWeightG?: number;
  values: NutritionValues;
}

/** Datakvalitet för näringsdata – källan ska alltid vara spårbar (spec §9, §21). */
export interface NutritionProvenance {
  source:
    | "livsmedelsverket"
    | "product_label"
    | "licensed_database"
    | "user_entered"
    | "seed_estimate"
    | "computed_from_ingredients";
  confidence: number;
  verifiedByUser: boolean;
  lastVerifiedAt?: string;
}

/** Intervallvisning för uppskattningar, t.ex. tallriksfoto (spec §22). */
export interface NutritionEstimateRange {
  minKcal: number;
  maxKcal: number;
  mostLikelyKcal: number;
  values: NutritionValues;
  confidence: number;
}

/** Dagsmål per användare, beräknade deterministiskt av nutrition-engine. */
export interface DailyTargets {
  kcal: number;
  proteinG: number;
  carbsG: number;
  fatG: number;
  fiberG: number;
  /** Max rekommenderat salt (g) */
  saltMaxG: number;
}

export const EMPTY_NUTRITION: NutritionValues = {
  kcal: 0,
  proteinG: 0,
  carbsG: 0,
  fatG: 0,
  saturatedFatG: 0,
  fiberG: 0,
  sugarG: 0,
  saltG: 0,
};
