#!/usr/bin/env php
<?php
/**
 * Facebook Token Checker
 * Validates token and shows accessible pages
 */

// Set CLI environment
$_SERVER['REQUEST_METHOD'] = 'GET';

require_once __DIR__ . '/config/config.php';

echo "=== Facebook Token Checker ===\n\n";

// Get settings
$db = Database::getInstance()->getConnection();
$stmt = $db->prepare("SELECT `key`, value_encrypted FROM settings WHERE section = 'facebook'");
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

$token = null;
$pageId = null;

foreach ($rows as $row) {
    if ($row['key'] === 'FB_PAGE_ACCESS_TOKEN') {
        $token = $row['value_encrypted'];
    } elseif ($row['key'] === 'FB_PAGE_ID') {
        $pageId = $row['value_encrypted'];
    }
}

if (!$token) {
    echo "✗ No access token found in settings\n";
    exit(1);
}

echo "Token: " . substr($token, 0, 20) . "...\n";
echo "Configured Page ID: $pageId\n\n";

// Check token info
echo "1. Checking token validity...\n";
$url = "https://graph.facebook.com/v18.0/me?access_token=" . urlencode($token);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$data = json_decode($response, true);

if ($httpCode === 200 && isset($data['id'])) {
    echo "   ✓ Token is valid\n";
    echo "   Token belongs to: " . ($data['name'] ?? 'Unknown') . " (ID: {$data['id']})\n\n";

    // Check if this is a user or page token
    if (strlen($data['id']) < 20) {
        echo "   ⚠ This appears to be a USER ID, not a Page ID\n";
        echo "   You need a Page Access Token, not a User Access Token\n\n";
    }
} else {
    echo "   ✗ Token validation failed\n";
    echo "   Error: " . ($data['error']['message'] ?? 'Unknown error') . "\n";
    echo "   HTTP Code: $httpCode\n\n";
    exit(1);
}

// Get accessible pages
echo "2. Checking accessible pages...\n";
$url = "https://graph.facebook.com/v18.0/me/accounts?access_token=" . urlencode($token);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

$data = json_decode($response, true);

if ($httpCode === 200 && isset($data['data'])) {
    if (empty($data['data'])) {
        echo "   ⚠ No pages found for this token\n";
        echo "   This might be a User token instead of a Page token\n\n";
    } else {
        echo "   ✓ Found " . count($data['data']) . " accessible page(s):\n\n";
        foreach ($data['data'] as $page) {
            $match = ($page['id'] === $pageId) ? '← CONFIGURED' : '';
            echo "   - {$page['name']}\n";
            echo "     ID: {$page['id']} $match\n";
            echo "     Category: " . ($page['category'] ?? 'N/A') . "\n";

            if (!empty($page['access_token'])) {
                echo "     Has Page Token: Yes\n";
            }
            echo "\n";
        }

        // Check if configured page is in the list
        $found = false;
        foreach ($data['data'] as $page) {
            if ($page['id'] === $pageId) {
                $found = true;
                break;
            }
        }

        if (!$found && $pageId) {
            echo "   ✗ WARNING: Configured Page ID ($pageId) is NOT in your accessible pages!\n";
            echo "   Please update the Page ID in settings to one of the pages listed above.\n\n";
        }
    }
} else {
    echo "   ✗ Failed to get pages\n";
    echo "   Error: " . ($data['error']['message'] ?? 'Unknown error') . "\n\n";
}

echo "=== Recommendations ===\n\n";
echo "To get a valid Page Access Token:\n";
echo "1. Go to: https://developers.facebook.com/tools/explorer/\n";
echo "2. Select your app from the dropdown\n";
echo "3. Click 'Get Token' → 'Get Page Access Token'\n";
echo "4. Select your page\n";
echo "5. Make sure these permissions are granted:\n";
echo "   - pages_manage_posts\n";
echo "   - pages_read_engagement\n";
echo "6. Copy the generated token and update settings\n\n";
