<?php

declare(strict_types=1);

namespace Kylin\Agriculture\Commands;

use Illuminate\Console\Command;
use Kylin\Agriculture\Models\PesticideRecord;

/**
 * 清理过期农药使用记录
 *
 * Artisan 命令：php artisan agriculture:clean-pesticide-records
 *
 * 依据《农产品质量安全法》第二十七条，农产品生产记录保存至少二年。
 * 自动清理超过保留期的农药使用记录。
 *
 * 参数：
 *  --days：指定保留天数（默认 730 天，即 2 年）
 *  --force：强制执行，跳过确认
 */
class CleanPesticideRecordsCommand extends Command
{
    /** 命令签名 */
    protected $signature = 'agriculture:clean-pesticide-records
                            {--days= : 记录保留天数（默认 730 天）}
                            {--force : 强制执行，跳过确认}';

    /** 命令描述 */
    protected $description = '清理超过保留期的农药使用记录（依据《农产品质量安全法》第二十七条）';

    /**
     * 执行清理命令
     */
    public function handle(): int
    {
        $retentionDays = (int) ($this->option('days')
            ?? config('kylin-agriculture.pesticide_record_retention_days', 730));

        // 依据《农产品质量安全法》第二十七条，最低保留 2 年
        if ($retentionDays < 730) {
            $this->warn('依据《农产品质量安全法》第二十七条，农药使用记录保留期最少为 2 年（730 天）。已自动调整为 730 天。');
            $retentionDays = 730;
        }

        $cutoffDate = now()->subDays($retentionDays);

        $count = PesticideRecord::where('applied_at', '<', $cutoffDate)->count();

        if ($count === 0) {
            $this->info('没有需要清理的过期农药使用记录。');

            return 0;
        }

        $this->info("发现 {$count} 条超过 {$retentionDays} 天的农药使用记录（截止日期：{$cutoffDate->toDateString()}）。");

        if (! $this->option('force') && ! $this->confirm('确认删除这些记录吗？此操作不可逆。')) {
            $this->info('操作已取消。');

            return 0;
        }

        PesticideRecord::where('applied_at', '<', $cutoffDate)->delete();

        $this->info("已成功清理 {$count} 条过期农药使用记录。");

        return 0;
    }
}