"""
用 platform_income_log 重写 daily_income_stat，纠正重复记账后的虚高数字。
权威数据源是 platform_income_log（每笔支付一条，biz_ref 唯一），不是扫订单重算。
"""
from datetime import date, timedelta

from django.core.management.base import BaseCommand

from jituan.services.szjilu_accounting import (
    sync_daily_income_stat_for_date,
    sync_szjilu_income_from_logs,
)


class Command(BaseCommand):
    help = (
        '按 platform_income_log 同步 daily_income_stat（纠正今日收入虚高/笔数不准）。'
        '不要用 repair_wechat_income，那个会重复加钱。'
    )

    def add_arguments(self, parser):
        parser.add_argument(
            '--date',
            type=str,
            default='',
            help='同步日期 YYYY-MM-DD，默认今天',
        )
        parser.add_argument(
            '--days',
            type=int,
            default=1,
            help='从指定日期起向前同步几天，默认 1',
        )
        parser.add_argument(
            '--reset-day',
            action='store_true',
            help='同步前先删除该日全部日统计行，再按日志重建（纠正重复记账必选）',
        )
        parser.add_argument(
            '--sync-szjilu',
            action='store_true',
            help='同时按日志全量重算 szjilu 累计收入/今日流水',
        )

    def handle(self, *args, **options):
        if options['date']:
            end_day = date.fromisoformat(options['date'])
        else:
            end_day = date.today()
        days = max(1, int(options['days'] or 1))
        start_day = end_day - timedelta(days=days - 1)
        reset_day = bool(options['reset_day'])

        total = 0
        for i in range(days):
            d = start_day + timedelta(days=i)
            n = sync_daily_income_stat_for_date(d, reset_day=reset_day)
            total += n
            self.stdout.write(f'{d}: 已同步 {n} 个俱乐部日统计行')

        if options['sync_szjilu']:
            sz = sync_szjilu_income_from_logs()
            self.stdout.write(f'szjilu: 已重算 {sz} 个俱乐部累计收入')

        self.stdout.write(self.style.SUCCESS(
            f'完成。今日收入/笔数现与 platform_income_log 一致。'
            f'若仍有漏记支付，请确认 migrate config 后等新支付自动入账。'
        ))
