<?php

/*
 * File ini bagian dari:
 *
 * OpenDK
 *
 * Aplikasi dan source code ini dirilis berdasarkan lisensi GPL V3
 *
 * Hak Cipta 2017 - 2024 Perkumpulan Desa Digital Terbuka (https://opendesa.id)
 *
 * Dengan ini diberikan izin, secara gratis, kepada siapa pun yang mendapatkan salinan
 * dari perangkat lunak ini dan file dokumentasi terkait ("Aplikasi Ini"), untuk diperlakukan
 * tanpa batasan, termasuk hak untuk menggunakan, menyalin, mengubah dan/atau mendistribusikan,
 * asal tunduk pada syarat berikut:
 *
 * Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus disertakan dalam
 * setiap salinan atau bagian penting Aplikasi Ini. Barang siapa yang menghapus atau menghilangkan
 * pemberitahuan ini melanggar ketentuan lisensi Aplikasi Ini.
 *
 * PERANGKAT LUNAK INI DISEDIAKAN "SEBAGAIMANA ADANYA", TANPA JAMINAN APA PUN, BAIK TERSURAT MAUPUN
 * TERSIRAT. PENULIS ATAU PEMEGANG HAK CIPTA SAMA SEKALI TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN ATAU
 * KEWAJIBAN APAPUN ATAS PENGGUNAAN ATAU LAINNYA TERKAIT APLIKASI INI.
 *
 * @package    OpenDK
 * @author     Tim Pengembang OpenDesa
 * @copyright  Hak Cipta 2017 - 2024 Perkumpulan Desa Digital Terbuka (https://opendesa.id)
 * @license    http://www.gnu.org/licenses/gpl.html    GPL V3
 * @link       https://github.com/OpenSID/opendk
 */

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Pembangunan extends Model
{
    use HasFactory;

    protected $table = 'das_pembangunan';

    protected $fillable = [
        'id', // id didapatkan dari hasil sinkron opensid
        'judul',
        'tahun_anggaran',
        'kelompok',
        'sub_kelompok',
        'jenis_kegiatan',
        'lokasi',
        'volume',
        'satuan',
        'biaya',
        'sumber_biaya',
        'sumber_dana',
        'anggaran',
        'pelaksana_kegiatan',
        'keterangan',
        'desa_id',
    ];

    /**
     * Accessor untuk sumber_dana yang sudah diformat.
     * Jika data berupa JSON array (contoh: ["Dana Desa","ADD"]),
     * akan digabung menjadi string yang dipisah koma.
     *
     * @return string
     */
    public function getSumberDanaFormattedAttribute()
    {
        $sumberDana = $this->attributes['sumber_dana'] ?? '';

        if (empty($sumberDana)) {
            return '-';
        }

        // Coba decode JSON
        $decoded = json_decode($sumberDana, true);

        if (is_array($decoded)) {
            return implode(', ', $decoded);
        }

        return $sumberDana;
    }

    /**
     * Accessor untuk mendapatkan sumber_dana sebagai array.
     * Berguna jika lebih dari satu sumber dana ingin ditampilkan sebagai daftar/badge.
     *
     * @return array
     */
    public function getSumberDanaListAttribute()
    {
        $sumberDana = $this->attributes['sumber_dana'] ?? '';

        if (empty($sumberDana)) {
            return [];
        }

        $decoded = json_decode($sumberDana, true);

        if (is_array($decoded)) {
            return $decoded;
        }

        return [$sumberDana];
    }

    public function dokumentasi()
    {
        return $this->hasMany(PembangunanDokumentasi::class, 'id_pembangunan');
    }

    public function desa()
    {
        return $this->hasOne(DataDesa::class, 'desa_id', 'desa_id');
    }
}
