<?php
// paneladm.jatpluss.com/admin/admin_guardar_masivo.php
session_start();

if (empty($_SESSION['admin_id'])) {
    header('Location: login_admin.php');
    exit;
}

require_once __DIR__ . '/conexion.php';

/* -------- CSRF -------- */
if (empty($_POST['csrf_token']) || $_POST['csrf_token'] !== ($_SESSION['csrf_token'] ?? '')) {
    flash('Token CSRF inválido.', true);
}

/* -------- Datos -------- */
$emails_input = trim($_POST['emails']       ?? '');
$access_code  = trim($_POST['access_code']  ?? '');
$plataforma   = trim($_POST['plataforma']   ?? '');

$_SESSION['temp_emails']    = $emails_input;
$_SESSION['old_plataforma'] = $plataforma;

if ($emails_input==='' || $access_code==='' || $plataforma==='') {
    flash('Todos los campos son obligatorios.', true);
}

/* -------- Verificar plataforma existente -------- */
$stmt = $pdo->prepare("SELECT 1 FROM email_subjects WHERE platform = ? AND active = 1 LIMIT 1");
$stmt->execute([$plataforma]);
if (!$stmt->fetchColumn()) {
    flash('Plataforma seleccionada inválida.', true);
}

/* -------- Normalizar correos -------- */
$emails_array = array_unique(
    array_filter(                       // elimina vacíos
        array_map('trim', explode("\n", $emails_input))
    )
);

$invalid = array_filter(
    $emails_array,
    function ($e) {                     // ⇽ misma lógica sin arrow function
        return !filter_var($e, FILTER_VALIDATE_EMAIL);
    }
);


/* -------- Inserción masiva -------- */
$sql = "INSERT INTO usuarios_correos (email, password, plataforma, created_at)
        VALUES (:email, :password, :plataforma, NOW())
        ON DUPLICATE KEY UPDATE password = VALUES(password)";
$stmtIns = $pdo->prepare($sql);

$inserted = $duplicates = 0;
$pdo->beginTransaction();
try {
    foreach ($emails_array as $mail) {
        try {
            $stmtIns->execute([
                ':email'      => strtolower($mail),
                ':password'   => $access_code,
                ':plataforma' => $plataforma
            ]);
            $inserted += $stmtIns->rowCount() === 1 ? 1 : 0;  // si fue insert
            $duplicates += $stmtIns->rowCount() === 2 ? 1 : 0; // si fue update
        } catch (PDOException $e) {
            $duplicates++; // violación UNIQUE => fue update (ya lo contamos)
        }
    }
    $pdo->commit();
} catch (Exception $e) {
    $pdo->rollBack();
    flash('Error BD: '.$e->getMessage(), true);
}

/* -------- Feedback -------- */
$msg  = "$inserted correo(s) procesados.<br>";
$msg .= "$duplicates actualizado(s) por existir previamente.";
flash($msg, false, true);   // éxito y redirige a listado


/* -------- helper -------- */
function flash($msg, $error = false, $toList = false) {
    $_SESSION[$error ? 'error_message' : 'exito_message'] = $msg;
    if (!$error) { unset($_SESSION['temp_emails'], $_SESSION['old_plataforma']); }
    $dest = $toList && !$error ? 'admin_list_correo.php' : 'admin_asignar_masivo.php';
    header("Location: $dest");
    exit;
}
