-- Migration 002: Einladungen für eingehende Uploads (Kunde -> Mitarbeiter).
--
-- Ein Mitarbeiter erstellt eine Einladung; der externe Kunde lädt über den
-- Link Dateien hoch, die im Browser verschlüsselt und an den ÖFFENTLICHEN
-- Schlüssel des Mitarbeiters versiegelt werden (crypto_box_seal). Jeder Upload
-- wird als regulärer Transfer abgelegt (sender = Mitarbeiter, interner Empfänger
-- = Mitarbeiter) und über invitation_id mit der Einladung verknüpft.

CREATE TABLE IF NOT EXISTS invitations (
    id                BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    token             CHAR(43) NOT NULL,                 -- URL-sicheres Token (Base64url, 32 Byte)
    employee_user_id  BIGINT UNSIGNED NOT NULL,
    customer_email    VARCHAR(255) NULL,                 -- optional, für Anzeige/Benachrichtigung
    message           VARCHAR(500) NOT NULL DEFAULT '',  -- optionale Anweisung an den Kunden (Klartext)
    expires_at        DATETIME NOT NULL,
    status            ENUM('active','revoked') NOT NULL DEFAULT 'active',
    upload_count      INT UNSIGNED NOT NULL DEFAULT 0,
    created_at        DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,

    PRIMARY KEY (id),
    UNIQUE KEY uq_invitations_token (token),
    KEY idx_invitations_employee (employee_user_id),
    CONSTRAINT fk_invitations_employee FOREIGN KEY (employee_user_id)
        REFERENCES users (id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ALTER TABLE transfers
    ADD COLUMN invitation_id BIGINT UNSIGNED NULL AFTER sender_user_id,
    ADD KEY idx_transfers_invitation (invitation_id),
    ADD CONSTRAINT fk_transfers_invitation FOREIGN KEY (invitation_id)
        REFERENCES invitations (id) ON DELETE SET NULL;
