<?php
require_once '../includes/constants.php';
require_once '../includes/session.php';

if (!isset($_SESSION['admin_id']) || !in_array($_SESSION['admin_role'], ['manager','superadmin'])) {
    die("Access denied");
}
?>
<!DOCTYPE html>
<html>
<head>
    <title><?php echo SITE_TITLE . ' | Advertiser Reports</title>
    <link rel="stylesheet" href="css/admin.css">
</head>
<body>
<div class="container">
<?php
$start = $_GET['start'] ?? date('Y-m-01');
$end = $_GET['end'] ?? date('Y-m-d');
$advertiserId = $_GET['advertiser'] ?? '';
$offerId = $_GET['offer'] ?? '';
$country = $_GET['country'] ?? '';
$page = max(1, intval($_GET['page'] ?? 1));
$limit = 25;
$offset = ($page - 1) * $limit;

// Fetch dropdowns
$advertisers = $pdo->query("SELECT id, name FROM advertisers ORDER BY name")->fetchAll(PDO::FETCH_ASSOC);
$offers = $pdo->query("SELECT id, name FROM offers ORDER BY name")->fetchAll(PDO::FETCH_ASSOC);

// Build WHERE clause
$where = "c.conversion_time BETWEEN ? AND ?";
$params = [$start, $end];

if ($advertiserId) {
    $where .= " AND a.id = ?";
    $params[] = $advertiserId;
}
if ($offerId) {
    $where .= " AND o.id = ?";
    $params[] = $offerId;
}
if ($country) {
    $where .= " AND c.country = ?";
    $params[] = $country;
}

// Count total rows
$countStmt = $pdo->prepare("
    SELECT COUNT(*) FROM partners_conversions c
    JOIN advertiser_contracts ac ON c.offer_id = ac.offer_id
    JOIN advertisers a ON ac.advertiser_id = a.id
    JOIN offers o ON c.offer_id = o.id
    WHERE $where
");
$countStmt->execute($params);
$totalRows = $countStmt->fetchColumn();
$totalPages = ceil($totalRows / $limit);

// Fetch paginated data
$stmt = $pdo->prepare("
    SELECT a.name AS advertiser_name, o.name AS offer_name, c.country,
           COUNT(*) AS conversions, SUM(c.payout) AS total_payout
    FROM partners_conversions c
    JOIN advertiser_contracts ac ON c.offer_id = ac.offer_id
    JOIN advertisers a ON ac.advertiser_id = a.id
    JOIN offers o ON c.offer_id = o.id
    WHERE $where
    GROUP BY a.id, o.id, c.country
    ORDER BY total_payout DESC
    LIMIT $limit OFFSET $offset
");
$stmt->execute($params);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

// Export CSV
if (isset($_GET['export'])) {
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename=advertiser_reports.csv');
    echo "Advertiser,Offer,Country,Conversions,Payout\n";
    foreach ($rows as $r) {
        echo "\"{$r['advertiser_name']}\",\"{$r['offer_name']}\",\"{$r['country']}\",\"{$r['conversions']}\",\"{$r['total_payout']}\"\n";
    }
    exit;
}

// UI
echo "<h2>📊 Advertiser Reports</h2>
<form method='get'>
    <label>Start: <input type='date' name='start' value='$start'></label>
    <label>End: <input type='date' name='end' value='$end'></label>
    <label>Advertiser:
        <select name='advertiser'>
            <option value=''>All</option>";
foreach ($advertisers as $a) {
    $selected = ($advertiserId == $a['id']) ? "selected" : "";
    echo "<option value='{$a['id']}' $selected>{$a['name']} (#{$a['id']})</option>";
}
echo "</select></label>
<label>Offer:
    <select name='offer'>
        <option value=''>All</option>";
foreach ($offers as $o) {
    $selected = ($offerId == $o['id']) ? "selected" : "";
    echo "<option value='{$o['id']}' $selected>{$o['name']} (#{$o['id']})</option>";
}
echo "</select></label>
<input name='country' placeholder='Country' value='$country'>
<button type='submit'>Filter</button>
<button onclick=\"window.location='?start=$start&end=$end&advertiser=$advertiserId&offer=$offerId&country=$country&export=1';return false;\">Export CSV</button>
</form>";

echo "<table><tr>
    <th>Advertiser</th><th>Offer</th><th>Country</th><th>Conversions</th><th>Payout</th>
</tr>";
$totalConversions = 0;
$totalPayout = 0;
foreach ($rows as $r) {
    $totalConversions += $r['conversions'];
    $totalPayout += $r['total_payout'];
    echo "<tr>
        <td>{$r['advertiser_name']}</td>
        <td>{$r['offer_name']}</td>
        <td>{$r['country']}</td>
        <td>{$r['conversions']}</td>
        <td>$" . number_format($r['total_payout'], 2) . "</td>
    </tr>";
}
echo "<tr><td colspan='3'><strong>Totals</strong></td>
      <td><strong>$totalConversions</strong></td>
      <td><strong>$" . number_format($totalPayout, 2) . "</strong></td></tr>";
echo "</table>";

// Pagination
if ($totalPages > 1) {
    echo "<div style='margin-top:20px'><strong>Pages:</strong> ";
    for ($i = 1; $i <= $totalPages; $i++) {
        $link = "?start=$start&end=$end&advertiser=$advertiserId&offer=$offerId&country=$country&page=$i";
        echo "<a href='$link' style='margin-right:10px'>" . ($i == $page ? "<strong>$i</strong>" : $i) . "</a>";
    }
    echo "</div>";
}
?>
</div>
</body>
</html>