<?php
// cron/ps-welcome-sync.php — Toutes les heures
// Détecte les nouveaux comptes créés directement sur shop.mykollector.com
// et envoie le mail de bienvenue MKO s'il n'a pas encore été envoyé.
//
// Logique :
//   1. Récupère les clients PS créés dans la dernière 1h10 (marge sécurité)
//   2. Pour chacun, vérifie dans logs_audit si le mail a déjà été envoyé
//   3. Si non → envoie inscriptionSportif() + log dans logs_audit
//
// Cron OVH : 0 * * * *  (toutes les heures, minute 0)

require_once __DIR__ . '/_bootstrap.php';

use App\Services\MailService;
use Illuminate\Database\Capsule\Manager as DB;

$mail   = new MailService();
$prefix = $_ENV['PS_TABLE_PREFIX'] ?? 'MkO025_';

// ── Connexion PDO PrestaShop ─────────────────────────────────────────────────
try {
    $pdo = new PDO(
        'mysql:host=' . ($_ENV['PS_DB_HOST'] ?? '') . ';dbname=' . ($_ENV['PS_DB_NAME'] ?? '') . ';charset=utf8mb4',
        $_ENV['PS_DB_USER'] ?? '',
        $_ENV['PS_DB_PASS'] ?? '',
        [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
    );
} catch (Exception $e) {
    error_log('[CRON ps-welcome-sync] Connexion PS échouée : ' . $e->getMessage());
    exit(1);
}

// ── Récupérer nouveaux clients PS (dernière 1h10 pour ne pas rater) ──────────
$since = date('Y-m-d H:i:s', strtotime('-70 minutes'));

$stmt = $pdo->prepare("
    SELECT id_customer, firstname, lastname, email, date_add
    FROM {$prefix}customer
    WHERE deleted = 0
      AND is_guest = 0
      AND active = 1
      AND date_add >= ?
    ORDER BY date_add ASC
");
$stmt->execute([$since]);
$nouveaux = $stmt->fetchAll(PDO::FETCH_ASSOC);

if (empty($nouveaux)) {
    error_log('[CRON ps-welcome-sync] ' . date('c') . ' — aucun nouveau client PS');
    exit(0);
}

$envoyes  = 0;
$ignores  = 0;

foreach ($nouveaux as $client) {
    $email  = $client['email'];
    $prenom = $client['firstname'];
    $nom    = $client['lastname'];
    $psId   = (int) $client['id_customer'];

    // ── Déjà traité ? (log_audit comme source de vérité) ────────────────────
    $dejaFait = DB::table('logs_audit')
        ->where('action', 'ps_welcome_mail_sent')
        ->where('entite', 'ps_customer')
        ->where('entite_id', $psId)
        ->exists();

    if ($dejaFait) {
        $ignores++;
        continue;
    }

    // ── Envoi mail bienvenue MKO ─────────────────────────────────────────────
    $destinataire = $prenom ?: ($nom ?: 'Sportif');
    $ok = $mail->inscriptionSportif($email, $destinataire);

    // ── Log dans logs_audit (évite le doublon au prochain cron) ─────────────
    DB::table('logs_audit')->insert([
        'action'     => 'ps_welcome_mail_sent',
        'entite'     => 'ps_customer',
        'entite_id'  => $psId,
        'details'    => json_encode([
            'email'    => $email,
            'prenom'   => $prenom,
            'nom'      => $nom,
            'sent'     => $ok,
            'date_ps'  => $client['date_add'],
        ]),
        'created_at' => date('Y-m-d H:i:s'),
    ]);

    if ($ok) {
        $envoyes++;
        error_log('[CRON ps-welcome-sync] Mail envoyé → ' . $email);
    } else {
        error_log('[CRON ps-welcome-sync] Échec mail → ' . $email);
    }
}

error_log(
    '[CRON ps-welcome-sync] ' . date('c') .
    " — {$envoyes} mail(s) envoyé(s), {$ignores} ignoré(s) (déjà traités)"
);
