<?php

require_once 'doctrine-config.php';

use Entity\Werbenetzwerk;
use Entity\User;
use Entity\Kampagne;

try {
    // Werbenetzwerk-Entity holen
    // Werbenetzwerk-User holen
    $werbenetzwerkUser = $entityManager->getRepository(User::class)->findByUsername('adcity-eu');

    if (!$werbenetzwerkUser) {
        echo "werbenetzwerkUser-Daten nicht gefunden.\n";
        exit(1);
    }

    $werbenetzwerk = $entityManager->getRepository(Werbenetzwerk::class)->findByUser($werbenetzwerkUser);

    if (!$werbenetzwerk) {
        echo "Werbenetzwerk-Daten nicht gefunden.\n";
        exit(1);
    }



    if (!$werbenetzwerkUser) {
        echo "Kein Werbenetzwerk-User gefunden.\n";
        exit(1);
    }

    // API-Parameter vorbereiten
    $apiUrl = 'https://www.adcity.eu/interface/';
    $params = [
        'typ' => 'forcedtextlink',
        'id' => $werbenetzwerk->getUserId(),
        'pw' => $werbenetzwerk->getInterfacepasswort(),
        'uebrig' => 20,
        'reload' => 99999,
        'verguetung' => 0.0001,
        'ma' => 99999
    ];

    $fullUrl = $apiUrl . '?' . http_build_query($params);

    // API-Anfrage durchführen
    $response = file_get_contents($fullUrl);

    if ($response === false) {
        echo "Fehler beim Abrufen der API-Daten.\n";
        exit(1);
    }

    echo "Response received:\n";
    echo $response . "\n\n";

    // Flatfile-Response parsen (alle Kampagnen pipe-getrennt in einer Zeile)
    $parts = explode('|', trim($response));

    $kampagnenCount = 0;
    $updatedCount = 0;
    $createdCount = 0;

    // Durch alle Kampagnen iterieren (je 5, 6 oder 7 Felder pro Kampagne)
    $i = 0;
    while ($i < count($parts)) {
        // Mindestens 5 Felder erforderlich
        if ($i + 4 >= count($parts)) {
            break;
        }

        // Erste 5 Felder auslesen
        $kid = $parts[$i];
        $linktext = $parts[$i + 1];
        $reload = (int) $parts[$i + 2];
        $uebrig = (int) $parts[$i + 3];
        $verdienst = (float) $parts[$i + 4];

        // Prüfen ob MA-Feld vorhanden ist (6. Feld)
        $ma = 0;
        $mailtext = null;
        $fieldsConsumed = 5;

        // Heuristik: Wenn das nächste Feld numerisch ist und klein, ist es wahrscheinlich MA
        if ($i + 5 < count($parts) && is_numeric($parts[$i + 5]) && $parts[$i + 5] < 1000) {
            $ma = (int) $parts[$i + 5];
            $fieldsConsumed = 6;

            // Prüfen ob Nachrichtentext vorhanden ist (7. Feld)
            if ($i + 6 < count($parts) && !is_numeric($parts[$i + 6])) {
                $mailtext = $parts[$i + 6];
                $fieldsConsumed = 7;
            }
        }

        $i += $fieldsConsumed;
        $kampagnenCount++;

        // Link-URL und Bild-URL generieren (USERID und SEITENID werden später beim Einbau ersetzt)
        $destUrl = "https://www.adcity.eu/codes/forcedtextlinkklick.php?id={USERID}&bid=$kid&aid={SEITENID}";

        echo "Processing: $linktext (KID: $kid, MA: $ma, Reload: $reload, Uebrig: $uebrig)\n";

        // Prüfen ob Kampagne bereits existiert (anhand user_id, KID und is_tr=1)
        $existingKampagne = $entityManager->getRepository(Kampagne::class)
            ->findOneBy([
                'user' => $werbenetzwerkUser,
                'kid' => $kid,
                'is_tr' => true
            ]);

        if ($existingKampagne) {
            // Kampagne aktualisieren (verguetung, reload, uebrig)
            $existingKampagne->setVerguetung($verdienst);
            $existingKampagne->setReload($reload);
            $existingKampagne->setUebrig($uebrig);
            $existingKampagne->setLinktext($linktext);
            $existingKampagne->setMa($ma);
            if ($mailtext) {
                $existingKampagne->setMailtext($mailtext);
                $existingKampagne->setIsMail(true);
            }

            $entityManager->persist($existingKampagne);
            $updatedCount++;
            echo "  → Updated existing campaign (verguetung: $verdienst, reload: $reload, uebrig: $uebrig)\n";
        } else {
            // Neue Kampagne erstellen
            $kampagne = new Kampagne();
            $kampagne->setDestUrl($destUrl);
            $kampagne->setKid($kid);
            $kampagne->setLinktext($linktext);
            $kampagne->setMa($ma);
            $kampagne->setReload($reload);
            $kampagne->setVerguetung($verdienst);
            $kampagne->setUebrig($uebrig);
            $kampagne->setIsFb(false);
            $kampagne->setIsTr(true);
            $kampagne->setIsMail(false);
            if ($mailtext) {
                $kampagne->setMailtext($mailtext);
                $kampagne->setIsMail(true);
            }
            $kampagne->setUser($werbenetzwerkUser);

            $entityManager->persist($kampagne);
            $createdCount++;
            echo "  → Created new campaign\n";
        }
    }

    $entityManager->flush();

    echo "\n=== Summary ===\n";
    echo "Total campaigns processed: $kampagnenCount\n";
    echo "Created: $createdCount\n";
    echo "Updated: $updatedCount\n";
    echo "\nCron job completed successfully.\n";

} catch (\Exception $e) {
    echo "Fehler: " . $e->getMessage() . "\n";
    echo $e->getTraceAsString() . "\n";
    exit(1);
}
