<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('memory_limit', '1024M');
set_time_limit(0);

/* ================== PARAM ================== */
$provider = $_GET['provider'] ?? '';

class NexusUpdater {

    private $db;
    private $api_endpoint = 'https://api.nexusggr.com';
    private $agent_code   = '';
    private $agent_token  = '';

    public function __construct() {
        $this->db = new PDO(
            "mysql:host=localhost;dbname=etfurezx_kenari;charset=utf8mb4",
            "etfurezx_kenari",
            "etfurezx_kenari",
            [
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
            ]
        );
    }

    /* ================= API REQUEST ================= */
    private function api($data) {
        $ch = curl_init($this->api_endpoint);
        curl_setopt_array($ch, [
            CURLOPT_POST            => true,
            CURLOPT_POSTFIELDS      => json_encode($data),
            CURLOPT_RETURNTRANSFER  => true,
            CURLOPT_HTTPHEADER      => ['Content-Type: application/json'],
            CURLOPT_TIMEOUT         => 60
        ]);

        $res = curl_exec($ch);
        if (!$res) {
            die('CURL ERROR: ' . curl_error($ch));
        }
        curl_close($ch);

        return json_decode($res, true);
    }

    /* ================= SYNC ================= */
    public function syncProvider($provider) {

        $res = $this->api([
            'method'        => 'game_list',
            'agent_code'    => $this->agent_code,
            'agent_token'   => $this->agent_token,
            'provider_code' => $provider
        ]);

        /* ===== fleksibel parsing response ===== */
        $games = [];
        if (isset($res['games'])) $games = $res['games'];
        elseif (isset($res['game_list'])) $games = $res['game_list'];
        elseif (isset($res['data']['games'])) $games = $res['data']['games'];
        elseif (isset($res['list'])) $games = $res['list'];

        if (!$games) {
            echo "❌ DATA GAME KOSONG / FORMAT API BERUBAH<br>";
            echo "<pre>"; print_r($res); echo "</pre>";
            exit;
        }

        echo "<b>TOTAL GAME:</b> " . count($games) . "<br><br>";

        foreach ($games as $g) {

            /* ===== normalisasi field ===== */
            $gameid   = $g['game_code'] ?? $g['id'] ?? $g['code'] ?? null;
            $gamename = $g['game_name'] ?? $g['name'] ?? $g['title'] ?? null;
            $image    = $g['banner'] ?? $g['icon'] ?? $g['image'] ?? '';

            if (!$gameid || !$gamename) continue;

            /* ================= RULE KATEGORI ================= */
            $isLive = ($provider === 'PRAGMATICLIVE');
            $category = $isLive ? 'LC' : 'SL';
            $datatype = $isLive ? 'LC' : 'SL';

            /* ================= CEK DUPLIKAT ================= */
            $cek = $this->db->prepare("
                SELECT 1 FROM tb_gamelist 
                WHERE gameidnumeric = :gid 
                AND provider = :provider 
                LIMIT 1
            ");
            $cek->execute([
                ':gid' => $gameid,
                ':provider' => $provider
            ]);

            if ($cek->fetchColumn()) {
                echo "⏭ SKIP: {$gamename}<br>";
                continue;
            }

            /* ================= INSERT ================= */
            $sql = "
                INSERT INTO tb_gamelist (
                    provider,
                    image,
                    gameidnumeric,
                    gameid,
                    gamename,
                    gametypeid,
                    category,
                    technology,
                    platform,
                    demogame,
                    aspectratio,
                    technologyid,
                    jurisdictions,
                    frbavailable,
                    datatype,
                    features
                ) VALUES (
                    :provider,
                    :image,
                    :gameidnumeric,
                    :gameid,
                    :gamename,
                    :gametypeid,
                    :category,
                    :technology,
                    :platform,
                    :demogame,
                    :aspectratio,
                    :technologyid,
                    :jurisdictions,
                    :frbavailable,
                    :datatype,
                    :features
                )
            ";

            $stmt = $this->db->prepare($sql);
            $stmt->execute([
                ':provider'        => $provider,
                ':image'           => $image,
                ':gameidnumeric'   => $gameid,
                ':gameid'          => $gameid,
                ':gamename'        => $gamename,
                ':gametypeid'      => $category,
                ':category'        => $category,
                ':technology'      => 'html5',
                ':platform'        => 'MOBILE,DOWNLOAD,WEB',
                ':demogame'        => '1',
                ':aspectratio'     => '16:9',
                ':technologyid'    => 'H5',
                ':jurisdictions'   => '1',
                ':frbavailable'    => '1',
                ':datatype'        => $datatype,
                ':features'        => ''
            ]);

            echo "✔ INSERT: {$gamename}<br>";
        }

        echo "<br><b>✅ DONE SYNC PROVIDER: {$provider}</b>";
    }
}

/* ================== PILIH PROVIDER ================== */
if (!$provider) {
    echo "<b>Pilih provider:</b><br><br>";
    foreach ([
        'PRAGMATIC',
        'HABANERO',
        'BOOONGO',
        'PLAYSON',
        'CQ9',
        'EVOPLAY',
        'TOPTREND',
        'DREAMTECH',
        'PGSOFT',
        'REELKINGDOM',
        'FATPANDA',
        'PRAGMATICLIVE'
    ] as $p) {
        echo "<a href='?provider={$p}'>{$p}</a><br>";
    }
    exit;
}

(new NexusUpdater())->syncProvider($provider);
