<?php

declare(strict_types=1);

namespace Kylin\AuditLog\Commands;

use Illuminate\Console\Command;
use Kylin\AuditLog\Services\AuditLogService;

/**
 * 清理过期审计日志
 *
 * Artisan 命令：php artisan audit:clean
 *
 * 依据《网络安全法》第二十一条，网络日志留存不少于 180 天。
 * 自动清理超过保留期的审计日志。
 *
 * 参数：
 *  --days：指定保留天数（默认 365 天，最小 180 天）
 *  --force：强制执行，跳过确认
 */
class CleanAuditLogCommand extends Command
{
    /** 命令签名 */
    protected $signature = 'audit:clean
                            {--days=365 : 日志保留天数（最小 180 天）}
                            {--force : 强制执行，跳过确认}';

    /** 命令描述 */
    protected $description = '清理过期审计日志（依据《网络安全法》第二十一条）';

    /**
     * 执行清理命令
     */
    public function handle(AuditLogService $service): int
    {
        $days = (int) $this->option('days');

        if ($days < 180) {
            $this->warn('依据《网络安全法》第二十一条，审计日志保留期最少为 180 天。已自动调整为 180 天。');
            $days = 180;
        }

        if (! $this->option('force') && ! $this->confirm("确认删除 {$days} 天前的审计日志？此操作不可逆。")) {
            $this->info('操作已取消。');

            return 0;
        }

        $count = $service->clean($days);

        $this->info("已成功清理 {$count} 条过期审计日志。");

        return 0;
    }
}