-- Automatischer PayPal-Abgleich per weitergeleiteter Benachrichtigungsmail.
--
-- Jeder Mandant bekommt einen eindeutigen Token fuer die Plus-Adresse
-- (z. B. zahlungen+<token>@domain). Der Admin richtet eine Weiterleitung von
-- PayPal an diese Adresse ein; der Token ordnet die Mail eindeutig dem
-- Mandanten zu. Der Token ist nicht sensibel und wird bei Bedarf erzeugt.
ALTER TABLE tenants
  ADD COLUMN paypal_inbox_token VARCHAR(32) NULL AFTER slug,
  ADD UNIQUE KEY uq_tenants_paypal_inbox_token (paypal_inbox_token);

-- Erkannte PayPal-Zahlungen: Dedup ueber den global eindeutigen
-- Transaktionscode und gleichzeitig Warteschlange fuer nicht eindeutig
-- zuordenbare Zahlungen (participant_id IS NULL, status 'unmatched').
CREATE TABLE IF NOT EXISTS paypal_payments (
  id INT AUTO_INCREMENT PRIMARY KEY,
  tenant_id INT NOT NULL,
  transaction_code VARCHAR(40) NOT NULL,
  payer_name VARCHAR(255) NOT NULL DEFAULT '',
  note VARCHAR(255) NULL,
  gross_cents INT NOT NULL DEFAULT 0,
  fee_cents INT NULL,
  net_cents INT NOT NULL DEFAULT 0,
  paid_at DATE NULL,
  participant_id INT NULL,
  ledger_entry_id INT NULL,
  status VARCHAR(20) NOT NULL DEFAULT 'unmatched',
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  UNIQUE KEY uq_paypal_payments_txn (transaction_code),
  KEY idx_paypal_payments_tenant_status (tenant_id, status),
  CONSTRAINT fk_paypal_payments_tenant
    FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE,
  CONSTRAINT fk_paypal_payments_participant
    FOREIGN KEY (participant_id) REFERENCES participants(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
