-- =====================================================================
-- Ételtár
--
-- Az ételek egyszer kerülnek be — névvel, leírással, árral, allergénekkel
-- —, utána a menükbe már csak beválogatjuk őket. A napi menünél ez a
-- legnagyobb megtakarítás: az étterem hetente ismétli a fogásait, és
-- eddig minden reggel újra kellett gépelni ugyanazokat a neveket.
--
-- A menükbe másolás, nem hivatkozás: ha egy étel ára később megváltozik
-- az ételtárban, a már kiadott napok tartalma nem változik meg
-- visszamenőleg. Egy tegnapi menü maradjon az, ami tegnap kiment.
-- =====================================================================

CREATE TABLE IF NOT EXISTS dish_categories (
  id         CHAR(36)     NOT NULL PRIMARY KEY,
  name       VARCHAR(120) NOT NULL,
  sort_order INT          NOT NULL DEFAULT 0,
  created_at DATETIME(3)  NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  updated_at DATETIME(3)  NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  KEY dish_categories_sort_idx (sort_order)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS dishes (
  id          CHAR(36)      NOT NULL PRIMARY KEY,
  -- Nullable és SET NULL: egy kategória törlése ne vigye magával az ételeket.
  category_id CHAR(36)      NULL,
  name        VARCHAR(160)  NOT NULL,
  description VARCHAR(400)  NULL,
  allergens   VARCHAR(60)   NULL,
  price       DECIMAL(10,2) NULL,
  is_archived TINYINT(1)    NOT NULL DEFAULT 0,
  created_at  DATETIME(3)   NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  updated_at  DATETIME(3)   NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
  KEY dishes_category_idx (category_id),
  KEY dishes_name_idx (name),
  CONSTRAINT dishes_category_fk FOREIGN KEY (category_id)
    REFERENCES dish_categories (id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Induló kategóriák, hogy ne üres felülettel kelljen kezdeni.
INSERT IGNORE INTO dish_categories (id, name, sort_order) VALUES
  ('88888888-8888-4888-8888-000000000001', 'Levesek',    0),
  ('88888888-8888-4888-8888-000000000002', 'Főételek',   1),
  ('88888888-8888-4888-8888-000000000003', 'Köretek',    2),
  ('88888888-8888-4888-8888-000000000004', 'Desszertek', 3),
  ('88888888-8888-4888-8888-000000000005', 'Italok',     4);
