-- Estructura de sucursales, POS y asignaciones por usuario

CREATE TABLE IF NOT EXISTS empresa_sucursales (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    empresa_id BIGINT UNSIGNED NOT NULL,
    codigo VARCHAR(20) NOT NULL,
    nombre VARCHAR(180) NOT NULL,
    direccion VARCHAR(255) NULL,
    telefono VARCHAR(50) NULL,
    es_principal TINYINT(1) NOT NULL DEFAULT 0,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NULL,
    deleted_at DATETIME NULL,
    UNIQUE KEY uq_empresa_sucursal (empresa_id, codigo),
    KEY idx_empresa_sucursal_empresa (empresa_id),
    CONSTRAINT fk_empresa_sucursal_empresa FOREIGN KEY (empresa_id) REFERENCES empresas(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS sucursal_pos (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    sucursal_id BIGINT UNSIGNED NOT NULL,
    codigo VARCHAR(20) NOT NULL,
    nombre VARCHAR(180) NOT NULL,
    descripcion VARCHAR(255) NULL,
    impresion_formato ENUM('A4','A5','TICKET') NOT NULL DEFAULT 'TICKET',
    es_principal TINYINT(1) NOT NULL DEFAULT 0,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NULL,
    deleted_at DATETIME NULL,
    UNIQUE KEY uq_sucursal_pos (sucursal_id, codigo),
    KEY idx_pos_sucursal (sucursal_id),
    CONSTRAINT fk_pos_sucursal FOREIGN KEY (sucursal_id) REFERENCES empresa_sucursales(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS usuario_sucursales (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    usuario_id BIGINT UNSIGNED NOT NULL,
    sucursal_id BIGINT UNSIGNED NOT NULL,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NULL,
    deleted_at DATETIME NULL,
    UNIQUE KEY uq_usuario_sucursal (usuario_id, sucursal_id),
    KEY idx_usuario_sucursal_usuario (usuario_id),
    KEY idx_usuario_sucursal_sucursal (sucursal_id),
    CONSTRAINT fk_usuario_sucursal_usuario FOREIGN KEY (usuario_id) REFERENCES usuarios(id),
    CONSTRAINT fk_usuario_sucursal_sucursal FOREIGN KEY (sucursal_id) REFERENCES empresa_sucursales(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS usuario_pos (
    id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    usuario_id BIGINT UNSIGNED NOT NULL,
    pos_id BIGINT UNSIGNED NOT NULL,
    estado TINYINT(1) NOT NULL DEFAULT 1,
    created_at DATETIME NOT NULL,
    updated_at DATETIME NULL,
    deleted_at DATETIME NULL,
    UNIQUE KEY uq_usuario_pos (usuario_id, pos_id),
    KEY idx_usuario_pos_usuario (usuario_id),
    KEY idx_usuario_pos_pos (pos_id),
    CONSTRAINT fk_usuario_pos_usuario FOREIGN KEY (usuario_id) REFERENCES usuarios(id),
    CONSTRAINT fk_usuario_pos_pos FOREIGN KEY (pos_id) REFERENCES sucursal_pos(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ALTER TABLE facturacion_comprobantes
    ADD COLUMN sucursal_id BIGINT UNSIGNED NULL AFTER empresa_id,
    ADD COLUMN pos_id BIGINT UNSIGNED NULL AFTER sucursal_id,
    ADD KEY idx_fact_comprobante_sucursal (sucursal_id),
    ADD KEY idx_fact_comprobante_pos (pos_id),
    ADD CONSTRAINT fk_fact_comprobante_sucursal FOREIGN KEY (sucursal_id) REFERENCES empresa_sucursales(id),
    ADD CONSTRAINT fk_fact_comprobante_pos FOREIGN KEY (pos_id) REFERENCES sucursal_pos(id);
