<?php

namespace App\Filament\Resources\KelahiranResource\Pages;

use App\Filament\Resources\KelahiranResource;
use Filament\Resources\Pages\EditRecord;
use App\Models\Penduduk;
use App\Models\AnggotaKartuKeluarga;
use Filament\Actions\DeleteAction;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

class EditKelahiran extends EditRecord
{
    protected static string $resource = KelahiranResource::class;

    protected function handleRecordUpdate(\Illuminate\Database\Eloquent\Model $record, array $data): \Illuminate\Database\Eloquent\Model
    {
        return DB::transaction(function () use ($record, $data) {
            // Perbarui record Kelahiran terlebih dahulu
            $record->update($data);

            // Eager load relasi jika belum dimuat (penting jika data KK atau dusun berubah)
            $record->load('kartuKeluarga.dusun');

            $penduduk = $record->penduduk; // Memuat relasi penduduk

            // Jika penduduk belum ada (misal, record Kelahiran lama yang diedit untuk pertama kali)
            // Ini akan membuat Penduduk baru dan mengaitkannya.
            if (!$penduduk) {
                 $penduduk = Penduduk::create([
                    'nik' => null,
                    'nama' => $record->nama_bayi, // Gunakan $record karena sudah diupdate
                    'tempat_lahir' => $record->tempat_lahir,
                    'tanggal_lahir' => $record->tanggal_lahir,
                    'jenis_kelamin' => $record->jenis_kelamin,
                    'agama' => $record->agama,
                    'alamat' => $record->kartuKeluarga->dusun->nama . ', RT ' . $record->kartuKeluarga->rt . ' RW ' . $record->kartuKeluarga->rw,
                    'dusun_id' => $record->kartuKeluarga->dusun_id,
                    'rt' => $record->kartuKeluarga->rt,
                    'rw' => $record->kartuKeluarga->rw,
                    'perkawinan' => 'belum',
                    'is_baby' => true,
                    'pekerjaan' => 'belum bekerja',
                    'status_penduduk' => 'ada',
                ]);
                // Penting: Update penduduk_id di record Kelahiran jika baru dibuat
                $record->update(['penduduk_id' => $penduduk->id]);
                Log::info('Membuat penduduk baru (saat update, penduduk tidak ditemukan): ' . $penduduk->id . ' - ' . $penduduk->nama);

            } else {
                // Update data Penduduk jika ditemukan
                $penduduk->update([
                    'nama' => $record->nama_bayi,
                    'tempat_lahir' => $record->tempat_lahir,
                    'tanggal_lahir' => $record->tanggal_lahir,
                    'jenis_kelamin' => $record->jenis_kelamin,
                    'agama' => $record->agama,
                    'alamat' => $record->kartuKeluarga->dusun->nama . ', RT ' . $record->kartuKeluarga->rt . ' RW ' . $record->kartuKeluarga->rw,
                    'dusun_id' => $record->kartuKeluarga->dusun_id,
                    'rt' => $record->kartuKeluarga->rt,
                    'rw' => $record->kartuKeluarga->rw,
                ]);
                Log::info('Memperbarui penduduk: ' . $penduduk->id . ' - ' . $penduduk->nama);
            }

            // Pastikan dia terdaftar sebagai anggota keluarga untuk KK yang dipilih
            AnggotaKartuKeluarga::firstOrCreate(
                [
                    'kartu_keluarga_id' => $record->kartu_keluarga_id,
                    'penduduk_id' => $penduduk->id,
                ],
                [
                    'hubungan' => 'anak',
                ]
            );
            Log::info('Memastikan anggota keluarga terdaftar: ' . $penduduk->nama . ' di KK: ' . $record->kartuKeluarga->nomor_kk);

            return $record;
        });
    }
    
}