<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;

function Mirai_referralAdminGetRebateOrders($page = 1, $pageSize = 20, $filters = []) {
    $db = \Typecho\Db::get();
    $orderTable = Mirai_pointsTable('mirai_pay_orders');

    $select = $db->select()->from($orderTable)->where('referrer_uid IS NOT NULL AND rebate_price > 0');

    if (!empty($filters['status'])) {
        $select = $select->where('rebate_status = ?', (int)$filters['status']);
    }
    if (!empty($filters['referrer_uid'])) {
        $select = $select->where('referrer_uid = ?', (int)$filters['referrer_uid']);
    }

    $countSelect = $db->select(['COUNT(*)' => 'cnt'])->from($orderTable)
        ->where('referrer_uid IS NOT NULL AND rebate_price > 0');
    $countRow = $db->fetchRow($countSelect);
    $total = (int)($countRow['cnt'] ?? 0);

    $offset = ($page - 1) * $pageSize;
    $rows = $db->fetchAll($select->order('created', \Typecho\Db::SORT_DESC)->limit($pageSize)->offset($offset));

    return ['list' => $rows, 'total' => $total, 'page' => $page, 'pageSize' => $pageSize];
}

function Mirai_referralAdminGetStatistics() {
    $db = \Typecho\Db::get();
    $orderTable = Mirai_pointsTable('mirai_pay_orders');

    $total = $db->fetchRow($db->select(['SUM(rebate_price)' => 'total', 'COUNT(*)' => 'cnt'])
        ->from($orderTable)->where('rebate_price > 0'));
    $pending = $db->fetchRow($db->select(['SUM(rebate_price)' => 'total', 'COUNT(*)' => 'cnt'])
        ->from($orderTable)->where('rebate_status = 0 AND rebate_price > 0'));
    $withdrawn = $db->fetchRow($db->select(['SUM(rebate_price)' => 'total', 'COUNT(*)' => 'cnt'])
        ->from($orderTable)->where('rebate_status = 1 AND rebate_price > 0'));

    return [
        'total' => ['count' => (int)($total['cnt'] ?? 0), 'amount' => (float)($total['total'] ?? 0)],
        'pending' => ['count' => (int)($pending['cnt'] ?? 0), 'amount' => (float)($pending['total'] ?? 0)],
        'withdrawn' => ['count' => (int)($withdrawn['cnt'] ?? 0), 'amount' => (float)($withdrawn['total'] ?? 0)],
    ];
}
