<?php
/**
 * Get PHP-FPM logs using WHM API
 * 
 * @param string $php_version PHP version number (e.g., '80', '81')
 * @return string|WP_Error Returns log content or WP_Error on failure
 */
function get_cpanel_phpfpm_logs($php_version = '83') {
    $log_path = "/opt/cpanel/ea-php{$php_version}/root/usr/var/log/php-fpm/error.log";
    
    // Get the server hostname
    $domain = $_SERVER['HTTP_HOST'];
    
    // WHM API endpoint for reading files
    $url = "https://{$domain}:2087/json-api/file";
    
    // API query parameters
    $query = http_build_query([
        'api.version' => 1,
        'filename' => $log_path
    ]);
    
    // Initialize cURL
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url . '?' . $query);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    
    // Set WHM API token authentication
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: whm root:' . WHM_API_TOKEN
    ]);
    
    // Execute the request
    $response = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $curl_error = curl_error($ch);
    curl_close($ch);
    
    if ($curl_error) {
        return new WP_Error(
            'curl_error',
            'cURL Error: ' . $curl_error
        );
    }
    
    if ($http_code !== 200) {
        return new WP_Error(
            'api_error',
            'WHM API Error. HTTP Code: ' . $http_code . '<br>' .
            'Response: ' . esc_html($response)
        );
    }
    
    // Parse the JSON response
    $data = json_decode($response, true);
    if (json_last_error() !== JSON_ERROR_NONE) {
        return new WP_Error(
            'json_error', 
            'Failed to parse API response: ' . json_last_error_msg() . '<br>' .
            'Raw response: ' . esc_html($response)
        );
    }
    
    // Check for API errors
    if (isset($data['metadata']) && $data['metadata']['result'] === 0) {
        return new WP_Error(
            'api_error',
            'WHM API Error: ' . (isset($data['metadata']['reason']) ? $data['metadata']['reason'] : 'Unknown error') . '<br>' .
            'Raw response: ' . esc_html($response)
        );
    }
    
    // Get the content from the response
    if (isset($data['data']) && !empty($data['data'])) {
        // Get last 10 lines
        $lines = explode("\n", $data['data']);
        $lines = array_slice($lines, -10);
        return implode("\n", $lines);
    }
    
    return new WP_Error(
        'no_data',
        'No log data in API response. Response: ' . esc_html($response)
    );
}

/**
 * Add PHP-FPM Logs menu item to WordPress admin
 */
function add_phpfpm_logs_menu() {
    add_menu_page(
        'PHP-FPM Logs',
        'PHP-FPM Logs',
        'manage_options',
        'phpfpm-logs',
        'display_phpfpm_logs',
        'dashicons-text-page',
        100
    );
}
add_action('admin_menu', 'add_phpfpm_logs_menu');

/**
 * Display the PHP-FPM logs page
 */
function display_phpfpm_logs() {
    // Check user capabilities
    if (!current_user_can('manage_options')) {
        return;
    }

    // Get PHP version from dropdown if set, otherwise use default
    $php_version = isset($_POST['php_version']) ? sanitize_text_field($_POST['php_version']) : '83';
    
    // Get logs
    $logs = get_cpanel_phpfpm_logs($php_version);
    ?>
    <div class="wrap">
        <h1><?php echo esc_html(get_admin_page_title()); ?></h1>
        
        <form method="post">
            <select name="php_version" id="php_version">
                <option value="74" <?php selected($php_version, '74'); ?>>PHP 7.4</option>
                <option value="80" <?php selected($php_version, '80'); ?>>PHP 8.0</option>
                <option value="81" <?php selected($php_version, '81'); ?>>PHP 8.1</option>
                <option value="82" <?php selected($php_version, '82'); ?>>PHP 8.2</option>
                <option value="83" <?php selected($php_version, '83'); ?>>PHP 8.3</option>
            </select>
            <?php submit_button('Refresh Logs', 'primary', 'submit', false); ?>
        </form>
        
        <div class="phpfpm-logs-container" style="margin-top: 20px;">
            <textarea readonly style="width: 100%; height: 600px; font-family: monospace; white-space: pre; overflow: auto;">
<?php
    if (is_wp_error($logs)) {
        echo esc_textarea($logs->get_error_message());
    } else {
        echo esc_textarea($logs);
    }
?>
            </textarea>
        </div>
    </div>
    <?php
}