<?php

namespace App\Filament\Resources\KelahiranResource\Pages;

use App\Filament\Resources\KelahiranResource;
use Filament\Resources\Pages\CreateRecord;
use App\Models\Penduduk;
use App\Models\AnggotaKartuKeluarga;
use App\Models\KartuKeluarga;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

class CreateKelahiran extends CreateRecord
{
    protected static string $resource = KelahiranResource::class;

    protected function handleRecordCreation(array $data): \Illuminate\Database\Eloquent\Model
    {
        return DB::transaction(function () use ($data) {
            // 1. Buat Penduduk Baru dari data Kelahiran
            $kartuKeluarga = KartuKeluarga::with('dusun')->find($data['kartu_keluarga_id']);

            $penduduk = Penduduk::create([
                'nik' => null,
                'nama' => $data['nama_bayi'],
                'tempat_lahir' => $data['tempat_lahir'],
                'tanggal_lahir' => $data['tanggal_lahir'],
                'jenis_kelamin' => $data['jenis_kelamin'],
                'agama' => $data['agama'],
                'alamat' => $kartuKeluarga->dusun->nama . ', RT ' . $kartuKeluarga->rt . ' RW ' . $kartuKeluarga->rw,
                'dusun_id' => $kartuKeluarga->dusun_id,
                'rt' => $kartuKeluarga->rt,
                'rw' => $kartuKeluarga->rw,
                'perkawinan' => 'belum',
                'pekerjaan' => 'belum bekerja',
                'status_penduduk' => 'ada',
                'is_baby' => true,
            ]);

            Log::info('Membuat penduduk baru: ' . $penduduk->id . ' - ' . $penduduk->nama);

            // 3. Tambahkan Penduduk sebagai Anggota Kartu Keluarga
            $anggota = AnggotaKartuKeluarga::create([
                'kartu_keluarga_id' => $data['kartu_keluarga_id'],
                'penduduk_id' => $penduduk->id,
                'hubungan' => 'anak',
            ]);
            Log::info('Menambahkan anggota keluarga: ' . $penduduk->nama . ' ke KK: ' . $kartuKeluarga->nomor_kk);

            // 2. Buat record Kelahiran, kaitkan dengan penduduk_id yang baru
            $data['penduduk_id'] = $penduduk->id; // Assign penduduk_id sebelum membuat Kelahiran
            $data['anggota_kk_id'] = $anggota->id; // Assign penduduk_id sebelum membuat Kelahiran
            $kelahiran = static::getModel()::create($data);
            

            return $kelahiran;
        });
    }

    protected function getRedirectUrl(): string
    {
        return $this->getResource()::getUrl('index');
    }
}