<?php

namespace App\Jobs;

use Maatwebsite\Excel\Facades\Excel;
use App\Exports\ServerLicenseExport;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;

class ExportReportJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $fileName;
    public $jobId;

    public function __construct($fileName, $jobId)
    {
        $this->fileName = $fileName;
        $this->jobId = $jobId;
    }

    public function handle()
    {
        $totalRows = DB::table('conf_server_license')->count(); // จำนวนข้อมูลทั้งหมด
        $processedRows = 0;

        // ใช้ chunk เพื่อแบ่งการประมวลผล
        DB::table('conf_server_license')->chunk(100, function ($rows) use (&$processedRows, $totalRows) {
            // ประมวลผลข้อมูลใน chunk
            Excel::store(new ServerLicenseExport($rows), $this->fileName, 'local');

            // เพิ่มจำนวนข้อมูลที่ถูกประมวลผล
            $processedRows += count($rows);

            // คำนวณเปอร์เซ็นต์ความคืบหน้า
            $progress = ($processedRows / $totalRows) * 100;

            // อัปเดต progress ลงใน cache แทนฐานข้อมูล
            Cache::put("export_progress_{$this->jobId}", $progress);
        });

        // ลบค่า progress เมื่อประมวลผลเสร็จสิ้น
        Cache::forget("export_progress_{$this->jobId}");
    }
}