yazrkisvs3vvvsv33svrhetrjsvyvsvvyjsvsvs
tavsuysvssvvjvvyjyjkvsvqd
qfogsvvsvsegjdgdfgdskhgdksvqsvshdqsd
<?php
// api/google-token-check.php — Monitor diario del token Google Ads
// Cron: 0 6 * * *  →  php /home/dimark93/public_html/supercerebro/api/google-token-check.php
// También ejecutable vía web con ?cron_token=CRON_SECRET para llamadas manuales/externas.

require_once __DIR__ . '/../config.php';
require_once __DIR__ . '/../db.php';
require_once __DIR__ . '/../credentials.php';
require_once __DIR__ . '/google-auth.php';

$is_cli   = php_sapi_name() === 'cli';
$req_tok  = $_GET['cron_token'] ?? ($_SERVER['HTTP_X_CRON_TOKEN'] ?? '');
$secret   = defined('CRON_SECRET') ? CRON_SECRET : '';

if (!$is_cli) {
    if (!$secret || $req_tok !== $secret) {
        http_response_code(403);
        echo json_encode(['ok'=>false,'error'=>'Forbidden']);
        exit;
    }
    header('Content-Type: application/json');
}

$admin_email = defined('DIMARK_EMAIL') ? DIMARK_EMAIL : 'info@dimark.co';
$sa_path     = defined('GOOGLE_SERVICE_ACCOUNT_JSON') ? GOOGLE_SERVICE_ACCOUNT_JSON : '';

$log = [];
$ok  = false;

// Detectar modo de autenticación
if ($sa_path && file_exists($sa_path)) {
    $log[] = 'Modo: Service Account — ' . basename($sa_path);
} elseif (defined('GOOGLE_REFRESH_TOKEN') && GOOGLE_REFRESH_TOKEN) {
    $log[] = 'Modo: OAuth refresh token (fallback)';
} else {
    $log[] = 'ERROR: No hay credenciales Google configuradas (ni Service Account ni OAuth)';
}

// Obtener access token vía dm_google_access_token (SA primero, OAuth fallback)
$token = dm_google_access_token();

if (!$token) {
    $log[] = 'ERROR: No se pudo obtener access_token';
} else {
    $ok = true;
    $log[] = 'OK: access_token obtenido correctamente';

    // Verificación ligera con API Google Ads
    $dev_token = defined('GOOGLE_DEV_TOKEN') ? GOOGLE_DEV_TOKEN : '';
    $mcc       = defined('GOOGLE_MCC_ID')    ? preg_replace('/[^0-9]/', '', GOOGLE_MCC_ID) : '';
    if ($dev_token) {
        $h2 = ['Authorization: Bearer '.$token,'developer-token: '.$dev_token,'Content-Type: application/json'];
        if ($mcc) $h2[] = 'login-customer-id: '.$mcc;
        $ch2 = curl_init('https://googleads.googleapis.com/v22/customers:listAccessibleCustomers');
        curl_setopt_array($ch2, [CURLOPT_RETURNTRANSFER=>true,CURLOPT_HTTPHEADER=>$h2,CURLOPT_TIMEOUT=>10,CURLOPT_SSL_VERIFYPEER=>true]);
        $raw2  = curl_exec($ch2);
        $code2 = curl_getinfo($ch2, CURLINFO_HTTP_CODE);
        curl_close($ch2);
        if ($code2 === 200) {
            $n = count((json_decode($raw2,true)['resourceNames'] ?? []));
            $log[] = "API Google Ads accesible — $n cuentas disponibles";
        } else {
            $log[] = "WARN: API Google Ads respondió HTTP $code2";
        }
    }
}

$date_str = date('Y-m-d H:i:s');
$status   = $ok ? 'OK' : 'FALLO';

// ── Guardar en base de datos ──────────────────────────────────────────────────
try {
    $pdo->exec("CREATE TABLE IF NOT EXISTS dm_token_monitor (
        id INT AUTO_INCREMENT PRIMARY KEY,
        service VARCHAR(32) NOT NULL DEFAULT 'google',
        status VARCHAR(10) NOT NULL,
        message TEXT,
        checked_at DATETIME NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
    $pdo->prepare("INSERT INTO dm_token_monitor (service, status, message, checked_at) VALUES (?,?,?,NOW())")
        ->execute(['google', $status, implode(' | ', $log)]);
    // Mantener solo últimos 90 registros
    $pdo->exec("DELETE FROM dm_token_monitor WHERE id NOT IN (SELECT id FROM (SELECT id FROM dm_token_monitor ORDER BY id DESC LIMIT 90) t)");
} catch (Exception $e) {
    $log[] = "DB: " . $e->getMessage();
}

// ── Email de alerta si falla ──────────────────────────────────────────────────
if (!$ok) {
    $subject = "=?UTF-8?B?" . base64_encode("[ALERTA] Token Google Ads inválido — $date_str") . "?=";
    $sa_configured = defined('GOOGLE_SERVICE_ACCOUNT_JSON') && GOOGLE_SERVICE_ACCOUNT_JSON && file_exists(GOOGLE_SERVICE_ACCOUNT_JSON);
    $body    = "El monitor automático de SuperCerebro detectó un problema con la autenticación Google Ads.\n\n"
             . "Fecha: $date_str\n"
             . "Estado: $status\n"
             . "Modo: " . ($sa_configured ? 'Service Account' : 'OAuth refresh token') . "\n"
             . "Detalle:\n" . implode("\n", array_map(fn($l) => "  » $l", $log)) . "\n\n"
             . ($sa_configured
                 ? "ACCIÓN REQUERIDA:\nVerifica que el Service Account JSON en config.php sea válido y que la cuenta tenga acceso a Google Ads MCC.\n"
                 : "ACCIÓN REQUERIDA:\n1. Abre SuperCerebro → ⚙ APIs → Google Ads\n2. Clic en 'Reconectar cuenta Google'\n3. Autoriza nuevamente con tu cuenta de Google\n")
             . "\n-- Monitor automático SuperCerebro DIMARK";
    $headers = "From: SuperCerebro Monitor <no-reply@dimark.co>\r\n"
             . "Reply-To: $admin_email\r\n"
             . "Content-Type: text/plain; charset=UTF-8";
    @mail($admin_email, $subject, $body, $headers);
    $log[] = "Email de alerta enviado a: $admin_email";
}

// ── Output ────────────────────────────────────────────────────────────────────
if ($is_cli) {
    echo "[$date_str] Google Token Monitor: $status\n";
    foreach ($log as $l) echo "  » $l\n";
    exit($ok ? 0 : 1);
} else {
    echo json_encode(['ok'=>$ok,'status'=>$status,'log'=>$log,'checked_at'=>$date_str]);
}
