<?php

namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithStyles;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
use Carbon\Carbon;

class PeminjamanExport implements FromCollection, WithHeadings, WithMapping, WithStyles, ShouldAutoSize
{
    protected $peminjaman;
    
    public function __construct($peminjaman)
    {
        $this->peminjaman = $peminjaman;
    }
    
    public function collection()
    {
        return $this->peminjaman;
    }
    
    public function headings(): array
    {
        return [
            'No',
            'Tanggal Pinjam',
            'Nama Peminjam',
            'Username',
            'Judul Buku',
            'Nomor Aset',
            'Tanggal Jatuh Tempo',
            'Tanggal Kembali',
            'Status',
            'Keterlambatan (Hari)',
            'Denda (Rp)',
        ];
    }
    
    public function map($peminjaman): array
    {
        static $no = 0;
        $no++;
        
        // Calculate keterlambatan
        $keterlambatan = 0;
        if ($peminjaman->tanggal_kembali) {
            $jatuhTempo = Carbon::parse($peminjaman->tanggal_jatuh_tempo);
            $kembali = Carbon::parse($peminjaman->tanggal_kembali);
            if ($kembali->gt($jatuhTempo)) {
                // Reversed order: jatuhTempo->diffInDays(kembali) untuk hasil positif
                $keterlambatan = (int) $jatuhTempo->diffInDays($kembali);
            }
        } elseif ($peminjaman->status_peminjaman == 'Dipinjam') {
            $jatuhTempo = Carbon::parse($peminjaman->tanggal_jatuh_tempo);
            $now = Carbon::now();
            if ($now->gt($jatuhTempo)) {
                // Reversed order untuk hasil positif
                $keterlambatan = (int) $jatuhTempo->diffInDays($now);
            }
        }

        
        return [
            $no,
            Carbon::parse($peminjaman->tanggal_pinjam)->format('d/m/Y'),
            $peminjaman->user->nama ?? '-',
            $peminjaman->user->username ?? '-',
            $peminjaman->asetBuku->buku->judul ?? '-',
            $peminjaman->asetBuku->nomor_aset ?? '-',
            Carbon::parse($peminjaman->tanggal_jatuh_tempo)->format('d/m/Y'),
            $peminjaman->tanggal_kembali ? Carbon::parse($peminjaman->tanggal_kembali)->format('d/m/Y') : '-',
            $peminjaman->status_peminjaman,
            $keterlambatan,
            number_format($peminjaman->denda, 0, ',', '.'),
        ];
    }
    
    public function styles(Worksheet $sheet)
    {
        return [
            1 => ['font' => ['bold' => true], 'fill' => ['fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID, 'color' => ['rgb' => 'E3F2FD']]],
        ];
    }
}
