<?php
/**
 * Migración: cotización de SERVICIOS con planes configurables (estilo asisma_ops).
 *
 * Crea:
 *   - servicios: el servicio cuelga de una MARCA (la vertical se deriva de la
 *     marca, igual que productos) e incluye el branding del documento premium
 *     (colores, logo, textos, garantía, condiciones y datos de transferencia)
 *     con defaults = Control Farma.
 *   - servicio_planes: planes del servicio; precio inicial (setup) y/o mensual,
 *     en CLP o UF; mínimos opcionales (NULL = el vendedor edita libre).
 *   - servicio_plan_caracteristicas: características por PLAN.
 *   - servicio_bonos: bonos/regalos por SERVICIO (lista compartida entre planes).
 * Altera cotizaciones: tipo, servicio_id, cuotas.
 * Siembra claves PDF_* en config_sistema (grupo pdf).
 *
 * Uso: C:\wamp\bin\php\php5.5.12\php.exe database\migracion_servicios.php
 */
$env = include __DIR__ . '/../.env.php';
$pdo = new PDO(
    'mysql:host=' . $env['DB_HOST'] . ';dbname=' . $env['DB_NAME'] . ';charset=utf8mb4',
    $env['DB_USER'],
    $env['DB_PASS'],
    array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);

// ── Tabla servicios ─────────────────────────────────────────────────────────
if ($pdo->query("SHOW TABLES LIKE 'servicios'")->fetch()) {
    echo "Tabla servicios ya existe.\n";
} else {
    $pdo->exec(
        "CREATE TABLE servicios (
            id INT AUTO_INCREMENT PRIMARY KEY,
            marca_id INT NOT NULL,
            nombre VARCHAR(150) NOT NULL,
            descripcion TEXT,
            color_primario VARCHAR(9) DEFAULT '#4a038d',
            color_secundario VARCHAR(9) DEFAULT '#7c3aed',
            logo_ruta VARCHAR(255) DEFAULT NULL,
            eslogan VARCHAR(255) DEFAULT NULL,
            ciudad_firma VARCHAR(100) DEFAULT 'Concepción',
            parrafos_presentacion TEXT,
            frase_destacada VARCHAR(255) DEFAULT NULL,
            titulo_bonos VARCHAR(255) DEFAULT NULL,
            garantia_dias INT DEFAULT 30,
            garantia_texto TEXT,
            condiciones_json TEXT,
            telefono_contacto VARCHAR(50) DEFAULT NULL,
            transferencia_titular VARCHAR(255) DEFAULT NULL,
            transferencia_rut VARCHAR(20) DEFAULT NULL,
            transferencia_banco VARCHAR(100) DEFAULT NULL,
            transferencia_tipo_cuenta VARCHAR(50) DEFAULT NULL,
            transferencia_numero_cuenta VARCHAR(50) DEFAULT NULL,
            transferencia_correo VARCHAR(255) DEFAULT NULL,
            activo TINYINT(1) DEFAULT 1,
            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
            CONSTRAINT fk_servicio_marca FOREIGN KEY (marca_id) REFERENCES marcas(id) ON DELETE CASCADE
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"
    );
    echo "Tabla servicios creada.\n";
}

// ── Tabla servicio_planes ───────────────────────────────────────────────────
if ($pdo->query("SHOW TABLES LIKE 'servicio_planes'")->fetch()) {
    echo "Tabla servicio_planes ya existe.\n";
} else {
    $pdo->exec(
        "CREATE TABLE servicio_planes (
            id INT AUTO_INCREMENT PRIMARY KEY,
            servicio_id INT NOT NULL,
            codigo VARCHAR(30) NOT NULL,
            nombre VARCHAR(150) NOT NULL,
            moneda ENUM('CLP','UF') NOT NULL DEFAULT 'UF',
            precio_inicial DECIMAL(12,2) DEFAULT NULL,
            precio_mensual DECIMAL(12,2) DEFAULT NULL,
            precio_inicial_minimo DECIMAL(12,2) DEFAULT NULL,
            precio_mensual_minimo DECIMAL(12,2) DEFAULT NULL,
            orden INT DEFAULT 0,
            activo TINYINT(1) DEFAULT 1,
            created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
            CONSTRAINT fk_plan_servicio FOREIGN KEY (servicio_id) REFERENCES servicios(id) ON DELETE CASCADE
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"
    );
    echo "Tabla servicio_planes creada.\n";
}

// ── Tabla servicio_plan_caracteristicas ─────────────────────────────────────
if ($pdo->query("SHOW TABLES LIKE 'servicio_plan_caracteristicas'")->fetch()) {
    echo "Tabla servicio_plan_caracteristicas ya existe.\n";
} else {
    $pdo->exec(
        "CREATE TABLE servicio_plan_caracteristicas (
            id INT AUTO_INCREMENT PRIMARY KEY,
            plan_id INT NOT NULL,
            titulo VARCHAR(255) NOT NULL,
            descripcion VARCHAR(255) DEFAULT NULL,
            orden INT DEFAULT 0,
            activo TINYINT(1) DEFAULT 1,
            CONSTRAINT fk_caracteristica_plan FOREIGN KEY (plan_id) REFERENCES servicio_planes(id) ON DELETE CASCADE
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"
    );
    echo "Tabla servicio_plan_caracteristicas creada.\n";
}

// ── Tabla servicio_bonos ────────────────────────────────────────────────────
if ($pdo->query("SHOW TABLES LIKE 'servicio_bonos'")->fetch()) {
    echo "Tabla servicio_bonos ya existe.\n";
} else {
    $pdo->exec(
        "CREATE TABLE servicio_bonos (
            id INT AUTO_INCREMENT PRIMARY KEY,
            servicio_id INT NOT NULL,
            titulo VARCHAR(255) NOT NULL,
            descripcion VARCHAR(255) DEFAULT NULL,
            incluido_por_defecto TINYINT(1) DEFAULT 1,
            orden INT DEFAULT 0,
            activo TINYINT(1) DEFAULT 1,
            CONSTRAINT fk_bono_servicio FOREIGN KEY (servicio_id) REFERENCES servicios(id) ON DELETE CASCADE
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"
    );
    echo "Tabla servicio_bonos creada.\n";
}

// ── Columnas agregadas después de la primera versión de la tabla ────────────
if ($pdo->query("SHOW COLUMNS FROM servicios LIKE 'rotulo_cliente'")->fetch()) {
    echo "Columna servicios.rotulo_cliente ya existe.\n";
} else {
    // Rótulo del cliente en el documento: "Propuesta para {rotulo}:" (OPS: "su FARMACIA")
    $pdo->exec("ALTER TABLE servicios ADD COLUMN rotulo_cliente VARCHAR(100) DEFAULT NULL AFTER eslogan");
    echo "Columna servicios.rotulo_cliente agregada.\n";
}

// ── ALTER cotizaciones: tipo, servicio_id, cuotas ───────────────────────────
$columnasNuevas = array(
    'tipo'        => "ALTER TABLE cotizaciones ADD COLUMN tipo ENUM('productos','servicios','mixta') NOT NULL DEFAULT 'productos' AFTER moneda",
    'servicio_id' => "ALTER TABLE cotizaciones ADD COLUMN servicio_id INT DEFAULT NULL AFTER tipo",
    'cuotas'      => "ALTER TABLE cotizaciones ADD COLUMN cuotas INT NOT NULL DEFAULT 1 AFTER servicio_id",
);
foreach ($columnasNuevas as $columna => $sql) {
    if ($pdo->query("SHOW COLUMNS FROM cotizaciones LIKE '$columna'")->fetch()) {
        echo "Columna cotizaciones.$columna ya existe.\n";
    } else {
        $pdo->exec($sql);
        echo "Columna cotizaciones.$columna agregada.\n";
    }
}

// ── Claves de configuración del PDF (grupo pdf) ─────────────────────────────
$claves = array(
    array('PDF_NODE_BIN', 'node', 'Binario de Node.js para generar PDF (Puppeteer)'),
    array('PDF_NODE_PATH', 'C:\\wamp\\www\\asisma_ops\\node_modules', 'NODE_PATH con puppeteer instalado (solo lectura)'),
    array('PDF_URL_INTERNA', '', 'URL base alternativa para que Puppeteer renderice (vacío = APP_URL)'),
    array('PDF_CACHE_DIR', 'C:\\Users\\Administrator\\.cache\\puppeteer', 'PUPPETEER_CACHE_DIR con Chrome instalado (Apache corre como SYSTEM)'),
);
$stmtExiste = $pdo->prepare("SELECT id FROM config_sistema WHERE clave = ?");
$stmtInsert = $pdo->prepare("INSERT INTO config_sistema (clave, valor, descripcion, grupo) VALUES (?, ?, ?, 'pdf')");
foreach ($claves as $c) {
    $stmtExiste->execute(array($c[0]));
    if ($stmtExiste->fetch()) {
        echo "Clave {$c[0]} ya existe.\n";
    } else {
        $stmtInsert->execute($c);
        echo "Clave {$c[0]} sembrada.\n";
    }
}

echo "Migración completada.\n";
