<?php

namespace App\Filament\Widgets;

use App\Models\Dusun; // Import model Dusun
use App\Models\Penduduk; // Import model Penduduk
use Filament\Widgets\ChartWidget;
use Flowbite\Flowbite\Components\Chart; // Pastikan ini terimport jika menggunakan Flowbite

class PendudukPerDusunChart extends ChartWidget
{
    protected static ?string $heading = 'Jumlah Penduduk per Dusun';

    // Set ukuran chart menjadi full width
    protected int | string | array $columnSpan = 'full';

    // Tipe grafik, bisa 'bar', 'line', 'pie', 'doughnut', 'polarArea', 'radar'
    protected static ?string $pollingInterval = null; // Opsional: null untuk tidak refresh otomatis
    protected static ?int $sort = 1; // Atur urutan jika ada widget lain

    protected function getType(): string
    {
        return 'bar'; // Atau 'pie', 'doughnut', dll. Coba 'bar' dulu.
    }

    protected function getData(): array
    {
        // Ambil semua dusun
        $dusuns = Dusun::all();

        $labels = [];
        $data = [];
        $colors = []; // Untuk warna acak setiap dusun

        // Loop melalui setiap dusun untuk menghitung jumlah penduduk
        foreach ($dusuns as $dusun) {
            $labels[] = $dusun->nama;
            $data[] = Penduduk::where('dusun_id', $dusun->id)->where('status_penduduk', 'ada')->where('is_ignore', false)->where('is_baby', false)->count();
            // Generate warna acak untuk setiap batang/slice
            $colors[] = '#' . str_pad(dechex(mt_rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT);
        }

        return [
            'datasets' => [
                [
                    'label' => 'Jumlah Penduduk',
                    'data' => $data,
                    'backgroundColor' => $colors, // Gunakan warna acak
                    'borderColor' => $colors, // Gunakan warna acak
                    'borderWidth' => 1,
                ],
            ],
            'labels' => $labels,
        ];
    }

    // Opsional: Konfigurasi opsi chart lebih lanjut (misalnya untuk menyembunyikan legenda, dll.)
    protected function getOptions(): array
    {
        return [
            'scales' => [
                'y' => [
                    'beginAtZero' => true,
                    'ticks' => [
                        'precision' => 0 // Pastikan sumbu Y menampilkan angka bulat
                    ]
                ],
            ],
            'plugins' => [
                'legend' => [
                    'display' => false, // Sembunyikan legenda jika hanya ada satu dataset
                ],
            ],
            'responsive' => true,
            'maintainAspectRatio' => false, // Biarkan chart menyesuaikan ukuran container
        ];
    }
}