<?php

namespace App\Exports;

use App\Models\Kelahiran;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithStyles; // <-- Import WithStyles
use Illuminate\Database\Eloquent\Builder;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; // <-- Import Worksheet
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use PhpOffice\PhpSpreadsheet\Style\Fill;         // <-- Import Fill
use PhpOffice\PhpSpreadsheet\Style\Color;        // <-- Import Color


class KelahiranExport implements FromQuery, WithHeadings, WithMapping, WithStyles, ShouldAutoSize
{
    protected ?int $dusunId = null;
    protected ?int $bulanKelahiran = null;

    public function __construct(?int $dusunId = null, ?int $bulanKelahiran = null)
    {
        $this->dusunId = $dusunId;
        $this->bulanKelahiran = $bulanKelahiran;
    }

    public function query(): Builder
    {
        $query = Kelahiran::query()->with(['penduduk.dusun', 'anggotaKeluarga.kartuKeluarga']);

        if ($this->dusunId) {
            $query->whereHas('penduduk', function (Builder $pendudukQuery) {
                $pendudukQuery->where('dusun_id', $this->dusunId);
            });
        }

        if ($this->bulanKelahiran) {
            $query->whereHas('penduduk', function (Builder $pendudukQuery) {
                $pendudukQuery->whereMonth('tanggal_lahir', $this->bulanKelahiran);
            });
        }

        return $query;
    }

    public function headings(): array
    {
        return [
            'No',
            'Nama Bayi',
            'Jenis Kelamin',
            'Tempat Lahir',
            'Tanggal Lahir',
            'Agama',
            'Asal Dusun',
            'Nomor Kartu Keluarga',
            'Tanggal Dibuat',
            'Tanggal Diperbarui',
        ];
    }

    public function map($kelahiran): array
    {
        $counter = 0;
        $counter++;
        return [
            $counter,
            $kelahiran->penduduk->nama ?? 'N/A', // Menggunakan relasi penduduk
            $kelahiran->penduduk->jenis_kelamin ?? 'N/A',
            $kelahiran->penduduk->tempat_lahir ?? 'N/A',
            $kelahiran->penduduk->tanggal_lahir ? \Carbon\Carbon::parse($kelahiran->penduduk->tanggal_lahir)->format('d-m-Y') : 'N/A',
            $kelahiran->penduduk->agama ?? 'N/A',
            $kelahiran->penduduk->dusun->nama ?? 'N/A', // Menggunakan relasi penduduk dan dusun
            " " . (string) $kelahiran->anggotaKeluarga->kartuKeluarga->nomor_kk ?? 'N/A',
            $kelahiran->created_at->format('d-m-Y H:i:s'),
            $kelahiran->updated_at->format('d-m-Y H:i:s'),
        ];
    }

    /**
     * Metode ini digunakan untuk menerapkan gaya pada worksheet.
     *
     * @param Worksheet $sheet
     */
    public function styles(Worksheet $sheet)
    {
        // Memberi warna latar belakang pada baris header (baris 1)
        $sheet->getStyle('A1:' . $sheet->getHighestColumn() . '1')->applyFromArray([
            'font' => [
                'bold' => true,
                'color' => ['argb' => Color::COLOR_WHITE], // Warna teks putih
            ],
            'fill' => [
                'fillType' => Fill::FILL_SOLID,
                'startColor' => [
                    'argb' => Color::COLOR_DARKGREEN, // Warna hijau gelap untuk header
                ],
            ],
        ]);
    }
}