import { boolean, doublePrecision, integer, pgTable, text, uuid, varchar } from "drizzle-orm/pg-core";
import { createdAt, updatedAt } from "./_shared.js";
import { inventoryItems } from "./inventory.js";

/**
 * Inventory Trust Engine (Fas 2 §5.2): deterministiska decay-profiler.
 * En aktiv profil styr hur snabbt confidence sjunker med tiden.
 * Decay påverkar endast FÖRTROENDE, inte ätbarhet (mjölkprincipen D-035).
 */
export const inventoryDecayProfiles = pgTable("inventory_decay_profiles", {
  id: uuid("id").primaryKey().defaultRandom(),
  name: varchar("name", { length: 64 }).notNull().unique(),
  description: text("description"),
  /** Antal dagar för confidence att halveras. */
  halfLifeDays: doublePrecision("half_life_days").notNull().default(7),
  /** Efter detta antal dagar anses posten vara stale oavsett ursprunglig confidence. */
  staleAfterDays: integer("stale_after_days").notNull().default(30),
  /** Sätt till false för att arkivera en profil utan att ta bort historiken. */
  active: boolean("active").notNull().default(true),
  createdAt: createdAt(),
  updatedAt: updatedAt(),
});

/** Valbar FK från inventory_items till den profil som användes när posten skapades. */
export const inventoryItemDecayProfile = pgTable("inventory_item_decay_profile", {
  inventoryItemId: uuid("inventory_item_id")
    .primaryKey()
    .references(() => inventoryItems.id, { onDelete: "cascade" }),
  decayProfileId: uuid("decay_profile_id")
    .notNull()
    .references(() => inventoryDecayProfiles.id, { onDelete: "restrict" }),
});
