-- =========================================================
--  Ferienwohnungen: Preis- und Belegungskalender
--  MySQL / MariaDB, utf8mb4
-- =========================================================

CREATE TABLE IF NOT EXISTS einheiten (
  id                  INT UNSIGNED NOT NULL AUTO_INCREMENT,
  code                VARCHAR(32)  NOT NULL,           -- z.B. "fw-alpenblick"
  name                VARCHAR(120) NOT NULL,
  max_personen        TINYINT UNSIGNED NOT NULL DEFAULT 4,
  personen_inklusive  TINYINT UNSIGNED NOT NULL DEFAULT 2,
  aufpreis_person     DECIMAL(6,2) NOT NULL DEFAULT 0.00,  -- pro Person und Nacht ueber "inklusive"
  basispreis          DECIMAL(8,2) NOT NULL DEFAULT 0.00,  -- Fallback, wenn fuer den Tag kein Preis gepflegt ist
  min_naechte_standard TINYINT UNSIGNED NOT NULL DEFAULT 2,
  endreinigung        DECIMAL(8,2) NOT NULL DEFAULT 0.00,  -- einmalig
  ortstaxe            DECIMAL(6,2) NOT NULL DEFAULT 0.00,  -- pro Person und Nacht, ab 15 Jahren
  aktiv               TINYINT(1)   NOT NULL DEFAULT 1,
  sortierung          SMALLINT     NOT NULL DEFAULT 0,
  PRIMARY KEY (id),
  UNIQUE KEY uq_code (code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Eine Zeile = eine Nacht. Das ist die einzige Wahrheit fuer Preis und Belegung.
-- Tagesweise pflegen = eine Zeile aendern. Zeitraum pflegen = viele Zeilen auf einmal aendern.
CREATE TABLE IF NOT EXISTS tageswerte (
  einheit_id   INT UNSIGNED NOT NULL,
  datum        DATE         NOT NULL,
  preis        DECIMAL(8,2) DEFAULT NULL,   -- NULL = Basispreis der Einheit gilt
  min_naechte  TINYINT UNSIGNED DEFAULT NULL,
  status       ENUM('frei','belegt','gesperrt') NOT NULL DEFAULT 'frei',
  anreise      TINYINT(1) NOT NULL DEFAULT 1, -- Anreise an diesem Tag erlaubt
  abreise      TINYINT(1) NOT NULL DEFAULT 1, -- Abreise an diesem Tag erlaubt
  notiz        VARCHAR(255) DEFAULT NULL,
  geaendert_am TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (einheit_id, datum),
  KEY idx_datum (datum),
  CONSTRAINT fk_tageswerte_einheit FOREIGN KEY (einheit_id)
    REFERENCES einheiten (id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Eingegangene Gastanfragen samt erzeugtem Antwortentwurf.
CREATE TABLE IF NOT EXISTS anfragen (
  id            INT UNSIGNED NOT NULL AUTO_INCREMENT,
  message_id    VARCHAR(255) NOT NULL,        -- IMAP Message-ID, verhindert Doppelbearbeitung
  eingang_am    DATETIME NOT NULL,
  absender_name VARCHAR(160) DEFAULT NULL,
  absender_mail VARCHAR(200) NOT NULL,
  betreff       VARCHAR(255) DEFAULT NULL,
  original      MEDIUMTEXT   DEFAULT NULL,
  sprache       VARCHAR(5)   NOT NULL DEFAULT 'de',
  anreise       DATE DEFAULT NULL,
  abreise       DATE DEFAULT NULL,
  personen      TINYINT UNSIGNED DEFAULT NULL,
  einheit_id    INT UNSIGNED DEFAULT NULL,
  angebot_json  TEXT DEFAULT NULL,            -- berechnete Zahlen, so wie sie verschickt wurden
  antwort_text  MEDIUMTEXT DEFAULT NULL,
  status        ENUM('neu','entwurf','gesendet','manuell','fehler') NOT NULL DEFAULT 'neu',
  hinweis       VARCHAR(500) DEFAULT NULL,    -- warum kein Automatikversand
  gesendet_am   DATETIME DEFAULT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY uq_message (message_id),
  KEY idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- ---------------------------------------------------------
-- Beispieldaten: die drei Wohnungen. Werte anpassen.
-- ---------------------------------------------------------
INSERT INTO einheiten
  (code, name, max_personen, personen_inklusive, aufpreis_person,
   basispreis, min_naechte_standard, endreinigung, ortstaxe, sortierung)
VALUES
  ('fw1', 'Ferienwohnung 1', 4, 2, 15.00, 95.00, 2, 60.00, 3.00, 10),
  ('fw2', 'Ferienwohnung 2', 4, 2, 15.00, 95.00, 2, 60.00, 3.00, 20),
  ('fw3', 'Ferienwohnung 3', 6, 4, 15.00, 130.00, 3, 80.00, 3.00, 30)
ON DUPLICATE KEY UPDATE name = VALUES(name);
