<?php

namespace App\Http\Controllers;

use App\Models\DataBalita;
use App\Models\DataIbuHamil;
use App\Models\DataPeriksaIbuHamil;
use App\Models\DataVitamin;
use Illuminate\Http\Request;
use App\Rules\UniqueParents;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\DB;
use Illuminate\Validation\Rule;
use Illuminate\Validation\Rules\Unique;
use Carbon\Carbon;

class DataPasienController extends Controller
{
    public function create()
    {
        return view('pages.tambah_pasien.tambah', [
            "title" => "Tambah Data Pasien",
            "heading" => "Tambah Data Pasien",
        ]);
    }

    public function store(Request $request)
    {
        // Memberikan Pesan kustom
        $customMessages = [
            'required_if' => 'Kolom :attribute wajib diisi jika status Sudah Melahirkan.',
            'required' => 'Kolom :attribute wajib diisi.',
            'min' => 'Kolom :attribute minimal harus :min karakter.',
            'max' => 'Kolom :attribute maksimal harus :max karakter.',
            'unique' => ':attribute telah terdaftar',
        ];

        // Untuk pengecekan validasi
        $validator = Validator::make(
            $request->all(),
            [
                'nama_ibu' => [
                    'required', 'min:3', 'max:255', function ($attribute, $value, $fail) use ($request) {
                        $nama_ayah = $request->input('nama_ayah');
                        $count = DataIbuHamil::where('nama_ibu', $value)
                            ->where('nama_ayah', $nama_ayah)
                            ->count();
                        if ($count > 0) {
                            $fail('Nama Ibu dan Ayah sudah terdaftar');
                        }
                    }
                ],

                'nik_ibu' => ['required', 'max:255', 'unique:data_ibu_hamil'],
                // 'umur_ibu' => ['required', 'max:255'],
                'tanggal_lahir_ibu' => ['required', 'max:255'],
                'tanggal_lahir_ayah' => ['required', 'max:255'],
                'nama_ayah' => ['required', 'max:255'],
                // 'umur_ayah' => ['required', 'max:255'],
                'alamat' => ['required', 'max:255'],
                'status_ayah' => ['required', 'max:255'],
                'status_ibu' => ['required', 'max:255'],
                'anak_ke' => ['required', 'max:255'],
                'nama_balita' => ['required_if:status_ibu,Sudah Melahirkan', 'max:255'],
                // 'nik_balita' => ['nullable', 'required_if:status_ibu,Sudah Melahirkan', 'max:255', 'unique:data_balita'],
                // 'nik_balita' => ['nullable', 'required_if:status_ibu,Sudah Melahirkan', 'required_if:status_nik_balita,Memiliki NIK', 'max:255', 'unique:data_balita'],
                'status_nik_balita' => ['required_if:status_ibu,Sudah Melahirkan', 'max:255'],
                'nik_balita' => [
                    'nullable',
                    'max:255',
                    'required_if:status_nik_balita,Memiliki NIK',
                    'unique:data_balita',
                    function ($attribute, $value, $fail) use ($request) {
                        if ($request->input('status_ibu') === 'Sudah Melahirkan' && $request->input('status_nik_balita') === 'Memiliki NIK' && empty($value)) {
                            $fail('Kolom NIK Balita wajib diisi jika Status NIK Balita adalah Memiliki NIK.');
                        }
                    }
                ],
                'jenis_kelamin' => ['required_if:status_ibu,Sudah Melahirkan', 'max:255'],
                'tanggal_lahir' => ['required_if:status_ibu,Sudah Melahirkan', 'max:255'],
                'jam_lahir' => ['required_if:status_ibu,Sudah Melahirkan', 'max:255'],

            ],
            $customMessages
        );



        // Jika validasi berhasil, lanjutkan proses penyimpanan data
        $validatedData = $validator->validated();

        // Hitung usia ibu
        $tanggalLahirIbu = Carbon::parse($request->input('tanggal_lahir_ibu'));
        $usiaIbu = $tanggalLahirIbu->diffInYears(Carbon::now());
        $tanggalLahirAyah = Carbon::parse($request->input('tanggal_lahir_ayah'));
        $usiaAyah = $tanggalLahirAyah->diffInYears(Carbon::now());
        // $tanggalLahirAyah = Carbon::parse($request->input('tanggal_lahir_ibu'));
        // $usiaAyah = $tanggalLahirAyah->diffInYears(Carbon::now());

        $validatedData['umur_ibu'] = $usiaIbu;
        $validatedData['umur_ayah'] = $usiaAyah;
        // $validatedData['umur_ayah'] = $usiaAyah;
        $newData = DataIbuHamil::create($validatedData);
        $newId = $newData->id;

        if ($validatedData['status_ibu'] === 'Sudah Melahirkan') {
            $nikBalita = $request->nik_balita ?? $request->status_nik_balita;
            DataBalita::create([
                'nik_balita' => $nikBalita,
                'status_nik_balita' => $request->status_nik_balita,
                'nama_balita' => $request->nama_balita,
                'jenis_kelamin' => $request->jenis_kelamin,
                'tanggal_lahir' => $request->tanggal_lahir,
                'jam_lahir' => $request->jam_lahir,
                'ibu_hamil_id' => $newId,
                'lingkar_kepala_balita' => $request->lingkar_kepala_balita,
                'status' => 'Sudah Dilahirkan'
            ]);
        }
        if ($validatedData['status_ibu'] === 'Hamil') {
            DataBalita::create([
                'status' => 'Belum Dilahirkan',
                'ibu_hamil_id' => $newId,
            ]);
        }

        // Jika berhasil arahkan halaman /data_laporan
        return redirect('/data_pasien')->with('success', 'Data Berhasil Ditambah');
    }
}
