<?php

namespace App\Exports;

use App\Models\LeaveRequest;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;

class LeaveRequestsExport implements FromCollection, WithHeadings
{
    /**
     * Mengambil koleksi data dari leave_request dan SalaryComponent
     *
     * @return \Illuminate\Support\Collection
     */
    public function collection()
    {
        // Ambil data leave requests dengan relasi leaveBalance dan employee
        $leave_requests = LeaveRequest::with('leaveBalance', 'employee')->get();

        // Cek jika data kosong
        if ($leave_requests->isEmpty()) {
            throw new \Exception('Tidak ada data cuti karyawan untuk diekspor.');
        }

        // Map data leave_requests ke format array untuk Excel
        return $leave_requests->map(function ($leave_request, $index) {
            return [
                $index + 1, // Nomor urut
                $leave_request->employee->nama_lengkap, // Mengakses relasi 'employee'
                $leave_request->employee->email,
                $leave_request->employee->no_telepon,
                $leave_request->employee->jabatan,
                $leave_request->leaveBalance->total_cuti ?? 0, // Mengakses relasi 'leaveBalance'
                $leave_request->leaveBalance->sisa_cuti ?? 0,
                $leave_request->leaveBalance->cuti_tahunan ?? 0,
                $leave_request->leaveBalance->cuti_darurat ?? 0,
            ];
        });
    }

    /**
     * Menyediakan Heading untuk setiap kolom di Excel
     *
     * @return array
     */
    public function headings(): array
    {
        return [
            'No',
            'Nama Lengkap',
            'Email',
            'No Telepon',
            'Jabatan',
            'Total Cuti',
            'Sisa Cuti',
            'Cuti Tahunan',
            'Cuti Darurat',
        ];
    }
}