<?php
/**
 * Photo Card BD — Universal Bridge (WordPress ছাড়া যেকোনো PHP সাইটের জন্য)
 * https://photocardbd.com/news-card/api-docs
 *
 * ১) এই ফাইলটা সাইটে তুলুন (যেমন: https://আপনারসাইট.com/pcbd-bridge.php)
 * ২) নিচে API কী আর ওয়েবহুকের গোপন কী বসান (photocardbd.com → প্রতিষ্ঠান সেটআপ → ওয়েবসাইট / অটো নিউজ)
 * ৩) কার্ড + ফেসবুক: খবর প্রকাশের পর   require 'pcbd-bridge.php'; pcbd_card($id, $title, $url, $image, $category);
 * ৪) অটো নিউজ (চালু থাকলে): অটো নিউজ পাতায় ওয়েবহুকের ঠিকানা দিন এই ফাইলের লিংক — আর নিচের pcbd_save_news() এ
 *    আপনার ডাটাবেসে খবর সেভ করার কোড লিখুন। না চাইলে ওয়েবহুক ছাড়াই pcbd_pull_news() দিয়ে নিজে টানতে পারেন।
 * PHP 7.2+ , curl লাগে।
 */

// ── আপনার তথ্য ──────────────────────────────────────────────────────────
const PCBD_API_KEY        = 'pcbd_আপনার_API_কী';
const PCBD_WEBHOOK_SECRET = 'whsec_আপনার_গোপন_কী';
const PCBD_SERVER         = 'https://photocardbd.com';

/**
 * অটো নিউজের খবর আপনার সাইটে সেভ করুন — এখানে নিজের কোড লিখুন।
 * $news: id, title, html (অনুচ্ছেদ ও তথ্যসূত্র, HTML), category, tags[], image_url, sources[], fb (১ হলে কার্ড চাই), created_at
 * ফেরত দিন: ['id' => নতুন খবরের আইডি, 'url' => প্রকাশিত খবরের লিংক]  — ব্যর্থ হলে null
 */
function pcbd_save_news(array $news) {
    // উদাহরণ (PDO):
    // $pdo = new PDO('mysql:host=localhost;dbname=news;charset=utf8mb4', 'user', 'pass');
    // $st = $pdo->prepare('INSERT INTO posts (title, content, category, image, status, created_at) VALUES (?, ?, ?, ?, "published", NOW())');
    // $st->execute([$news['title'], $news['html'], $news['category'], $news['image_url']]);
    // $id = (int)$pdo->lastInsertId();
    // $url = 'https://আপনারসাইট.com/news/' . $id;
    // if (!empty($news['fb'])) pcbd_card($id, $news['title'], $url, $news['image_url'], $news['category']);
    // return ['id' => $id, 'url' => $url];
    return null;
}

// ═════════════════════ নিচে কিছু বদলাতে হবে না ═════════════════════════

/** Photo Card BD API ডাকা */
function pcbd_api($action, array $params = []) {
    $ch = curl_init(rtrim(PCBD_SERVER, '/') . '/news-card/wp-api?action=' . rawurlencode($action));
    curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 20,
        CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . PCBD_API_KEY], CURLOPT_POSTFIELDS => $params]);
    $r = json_decode((string)curl_exec($ch), true);
    return is_array($r) ? $r : ['ok' => false, 'message' => 'সংযোগ হয়নি'];
}

/** খবর প্রকাশ হলো → ফটোকার্ড তৈরি ও ফেসবুক পেজে পোস্ট (লিংক কমেন্টে) */
function pcbd_card($id, $title, $url, $image_url, $category = '') {
    return pcbd_api('job', ['ext_id' => (string)$id, 'headline' => $title, 'post_url' => $url, 'image_url' => $image_url, 'category' => $category, 'fb' => 1]);
}

/** অটো নিউজ নিজে টানা (ওয়েবহুক না দিলে ক্রনে প্রতি ৫–১০ মিনিটে): সেভ করে জানায় */
function pcbd_pull_news() {
    $r = pcbd_api('autonews_pull');
    $done = 0;
    foreach ((array)($r['items'] ?? []) as $n) {
        $s = pcbd_save_news($n);
        pcbd_api('autonews_ack', $s ? ['id' => $n['id'], 'ok' => 1, 'wp_post_id' => (int)$s['id'], 'url' => (string)$s['url']] : ['id' => $n['id'], 'ok' => 0, 'message' => 'সেভ হয়নি']);
        if ($s) $done++;
    }
    return $done;
}

// ── ওয়েবহুক: এই ফাইলের লিংকে Photo Card BD খবর পাঠায় ──
if (basename($_SERVER['SCRIPT_FILENAME'] ?? '') === basename(__FILE__) && ($_SERVER['REQUEST_METHOD'] ?? '') === 'POST') {
    header('Content-Type: application/json; charset=utf-8');
    $body = (string)file_get_contents('php://input');
    $sig = (string)($_SERVER['HTTP_X_PCBD_SIGNATURE'] ?? '');
    if (!hash_equals('sha256=' . hash_hmac('sha256', $body, PCBD_WEBHOOK_SECRET), $sig)) { http_response_code(401); echo '{"ok":false,"message":"bad signature"}'; exit; }
    $p = json_decode($body, true);
    if (($p['event'] ?? '') === 'test') { echo '{"ok":true,"message":"bridge ready"}'; exit; }
    $s = is_array($p['news'] ?? null) ? pcbd_save_news($p['news']) : null;
    echo json_encode($s ? ['ok' => true, 'id' => (int)$s['id'], 'url' => (string)$s['url']] : ['ok' => false, 'message' => 'not saved'], JSON_UNESCAPED_SLASHES);
    exit;
}
