<?php
require_once __DIR__.'/_layout.php';
web_require_perm('orders');
if(!function_exists('bot_accounting_collect')) exit('AccountingService.php لود نشده است. فایل app/Services/AccountingService.php را جایگزین کن.');
web_check_csrf();

function acc_parse_date($v, $end=false){
    if(function_exists('bot_accounting_parse_filter_date')) return bot_accounting_parse_filter_date($v, $end);
    $v=trim((string)$v); if($v==='') return 0;
    $t=strtotime($v.($end?' 23:59:59':' 00:00:00'));
    return $t?:0;
}

if($_SERVER['REQUEST_METHOD']==='POST'){
    $action=$_POST['action'] ?? '';
    if($action==='settings'){
        bot_accounting_save_settings([
            'daily_channel_enabled'=>isset($_POST['daily_channel_enabled'])?'✅فعال':'❌غیر فعال',
            'channel_id'=>trim((string)($_POST['channel_id'] ?? '')),
        ]);
        web_flash('success','تنظیمات کانال حسابداری ذخیره شد.');
        web_redirect('accounting.php');
    }
    if($action==='send_daily'){
        $r=bot_accounting_send_daily_channel(true);
        if(!empty($r['ok']) && !empty($r['sent'])) web_flash('success','گزارش حسابداری به کانال ارسال شد.');
        else web_flash('error','ارسال گزارش انجام نشد: '.($r['error'] ?? ($r['skipped'] ?? 'unknown')));
        web_redirect('accounting.php');
    }
}

$fromStr=trim((string)($_GET['from'] ?? ''));
$toStr=trim((string)($_GET['to'] ?? ''));
$from=acc_parse_date($fromStr,false);
$to=acc_parse_date($toStr,true);
$report=bot_accounting_collect($from,$to);

if(isset($_GET['export']) && $_GET['export']==='csv'){
    $name='accounting-report-'.(function_exists('bot_accounting_file_stamp') ? bot_accounting_file_stamp() : date('Ymd-His')).'.csv';
    header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename="'.$name.'"');
    echo "\xEF\xBB\xBF";
    echo bot_accounting_csv($report);
    exit;
}
if(isset($_GET['export']) && $_GET['export']==='pdf'){
    $path=bot_accounting_generate_pdf($report);
    if(!is_file($path)) exit('PDF ساخته نشد.');
    header('Content-Type: application/pdf');
    header('Content-Disposition: attachment; filename="'.basename($path).'"');
    header('Content-Length: '.filesize($path));
    readfile($path); exit;
}

$s=bot_accounting_settings();
web_header('دفتر کل و حسابداری');
$t=$report['totals']; $l=$report['liabilities'];
?>
<div class="grid cards">
<?php
web_card('درآمد کل', bot_accounting_money($t['money_in']).' ریال', 'زیبال + کارت‌به‌کارت + پرداخت‌های شناسایی‌شده');
web_card('درآمد زیبال', bot_accounting_money($t['zibal_income']).' ریال', 'پرداخت‌های آنلاین موفق');
web_card('درآمد کارت‌به‌کارت', bot_accounting_money($t['card_income']).' ریال', 'رسیدهای تأییدشده');
web_card('پرداخت موفق', (string)(int)$t['payment_count'], 'تعداد تراکنش‌های درآمدی');
web_card('مانده کل کاربران', bot_accounting_money($l['total_points']).' الماس', 'تعهد فعلی ربات');
web_card('ارزش تقریبی تعهدات', bot_accounting_money($l['estimated_value']).' ریال', 'بر اساس میانگین قیمت فروش الماس');
?>
</div>

<div class="card">
    <h2>فیلتر و خروجی</h2>
    <form method="get" class="form-grid">
        <label>از تاریخ شمسی<br><input name="from" value="<?= web_h($fromStr) ?>" placeholder="1405/03/01"></label>
        <label>تا تاریخ شمسی<br><input name="to" value="<?= web_h($toStr) ?>" placeholder="1405/03/31"></label>
        <div style="display:flex;gap:8px;align-items:end;flex-wrap:wrap">
            <button class="btn primary" type="submit">اعمال فیلتر</button>
            <a class="btn" href="accounting.php">حذف فیلتر</a>
            <a class="btn" href="accounting.php?<?= http_build_query(['from'=>$fromStr,'to'=>$toStr,'export'=>'pdf']) ?>">📄 خروجی PDF</a>
            <a class="btn" href="accounting.php?<?= http_build_query(['from'=>$fromStr,'to'=>$toStr,'export'=>'csv']) ?>">📊 خروجی Excel/CSV</a>
        </div>
    </form>
    <p class="muted">تاریخ‌ها را شمسی وارد کن؛ نمونه: <code><?= web_h(function_exists('bot_accounting_today_jalali') ? bot_accounting_today_jalali('Y/m/d') : date('Y/m/d')) ?></code></p>
</div>

<div class="card">
    <h2>گزارش روزانه خودکار داخل کانال حسابداری</h2>
    <form method="post" class="form-grid">
        <?php web_csrf_input(); ?>
        <input type="hidden" name="action" value="settings">
        <label>کانال حسابداری<br><input name="channel_id" value="<?= web_h($s['channel_id'] ?? '') ?>" placeholder="@channel یا -1001234567890"></label>
        <label style="display:flex;align-items:center;gap:8px;margin-top:22px"><input type="checkbox" name="daily_channel_enabled" <?= (($s['daily_channel_enabled'] ?? '')==='✅فعال')?'checked':'' ?>> ارسال روزانه فعال باشد</label>
        <div style="display:flex;gap:8px;align-items:end;flex-wrap:wrap">
            <button class="btn primary" type="submit">ذخیره تنظیمات</button>
        </div>
    </form>
    <form method="post" style="margin-top:10px">
        <?php web_csrf_input(); ?>
        <input type="hidden" name="action" value="send_daily">
        <button class="btn" type="submit">ارسال تست گزارش امروز به کانال</button>
    </form>
    <p class="muted">برای ارسال خودکار، کرون <code>task=accounting_daily</code> را روزی یک بار اجرا کن یا از کرون شبانه استفاده کن.</p>
</div>

<div class="grid cards">
<?php
web_card('الماس فروخته‌شده', bot_accounting_money($t['diamond_sold']), 'در پرداخت‌های موفق');
web_card('الماس افزایشی', bot_accounting_money($t['diamond_plus']), 'هدیه، رفرال، شارژ دستی و ...');
web_card('الماس کسر/مصرف‌شده', bot_accounting_money($t['diamond_minus']), 'سفارش، جریمه لفت و ...');
web_card('کاربران دارای موجودی', bot_accounting_money($l['with_balance']), 'از کل '.bot_accounting_money($l['users']).' کاربر');
?>
</div>

<div class="card">
    <h2>کاربران با بیشترین مانده</h2>
    <?php web_table_start(['کاربر','موجودی']); foreach(($l['top'] ?? []) as $u){ echo '<tr><td><code>'.web_h($u['user_id']).'</code></td><td>'.web_h(bot_accounting_money($u['points'])).'</td></tr>'; } web_table_end(); ?>
</div>

<div class="card">
    <h2>دفتر کل مالی</h2>
    <?php
    web_table_start(['تاریخ','کاربر','عنوان','روش','ورودی ریال','تغییر الماس','مانده قبل/بعد','مرجع','ادمین','منبع']);
    $i=0;
    foreach($report['rows'] as $r){
        if($i++>=300) break;
        echo '<tr>';
        echo '<td>'.web_h($r['date']).'</td>';
        echo '<td><code>'.web_h($r['user_id']).'</code></td>';
        echo '<td>'.web_h($r['title']).'<br><small>'.web_h($r['description']).'</small></td>';
        echo '<td>'.web_h($r['method']).'</td>';
        echo '<td>'.web_h(bot_accounting_money($r['money_in'])).'</td>';
        echo '<td>'.web_h(bot_accounting_money($r['diamond_delta'])).'</td>';
        echo '<td>'.web_h(($r['balance_before']===null?'-':bot_accounting_money($r['balance_before'])).' / '.($r['balance_after']===null?'-':bot_accounting_money($r['balance_after']))).'</td>';
        echo '<td><code>'.web_h($r['ref']).'</code></td>';
        echo '<td><code>'.web_h($r['actor_id']).'</code></td>';
        echo '<td>'.web_h($r['source']).'</td>';
        echo '</tr>';
    }
    web_table_end();
    if(count($report['rows'])>300) echo '<p class="muted">فقط ۳۰۰ ردیف آخر نمایش داده شد. برای همه ردیف‌ها خروجی Excel/CSV بگیر.</p>';
    ?>
</div>
<?php web_footer(); ?>
