-- ============================================================
-- quoERP — Portal del Cliente (acceso externo)
-- Migracion: 026_customer_portal.sql
-- ============================================================
-- Permite a los clientes acceder a un portal web para ver
-- su estado de cuenta, facturas y descargar documentos.
-- Autenticacion por token unico enviado al correo o por
-- combinacion RUC/email + contrasena.
-- ============================================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

CREATE TABLE IF NOT EXISTS customer_portal_access (
    id             INT UNSIGNED  NOT NULL AUTO_INCREMENT,
    company_id     INT UNSIGNED  NOT NULL,
    customer_id    INT UNSIGNED  NOT NULL,
    email          VARCHAR(150)  NOT NULL,
    password_hash  VARCHAR(255)  DEFAULT NULL
        COMMENT 'bcrypt/SHA256 — NULL si solo usa magic link',
    access_token   VARCHAR(64)   DEFAULT NULL
        COMMENT 'Token de acceso por link (magic link)',
    token_expires  DATETIME      DEFAULT NULL,
    is_active      TINYINT(1)    NOT NULL DEFAULT 1,
    last_login_at  DATETIME      DEFAULT NULL,
    last_login_ip  VARCHAR(45)   DEFAULT NULL,
    created_at     DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at     DATETIME      DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY uk_company_email (company_id, email),
    INDEX idx_customer   (customer_id),
    INDEX idx_token      (access_token)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Columna de token publico en facturas (para descarga sin login)
ALTER TABLE sale_invoices
    ADD COLUMN IF NOT EXISTS public_token VARCHAR(32) DEFAULT NULL
        COMMENT 'Token unico para descarga publica sin login del portal';

SET FOREIGN_KEY_CHECKS = 1;

-- ─────────────────────────────────────────────────────────────
-- FIN DE MIGRACION
-- Tabla nueva: customer_portal_access
-- ALTER: sale_invoices (public_token)
-- ─────────────────────────────────────────────────────────────
