<?php

namespace App\Services;

use App\Models\Kredit;
use App\Repositories\KreditRepository;
use Illuminate\Database\Eloquent\Collection;

class KreditService
{
    protected $kreditRepository;

    public function __construct(KreditRepository $kreditRepository)
    {
        $this->kreditRepository = $kreditRepository;
    }

    public function getAllKredit(): Collection
    {
        // Contoh: Jika ada logika bisnis tambahan sebelum mengembalikan semua pegawai
        // return $this->kreditRepository->getAll()->sortBy('nama');
        return $this->kreditRepository->getAll();
    }

    public function getKreditById(int $id): ?Kredit
    {
        return $this->kreditRepository->findById($id);
    }

    public function getKreditByRekening(string $rekening): ?Kredit
    {
        return $this->kreditRepository->findByRekening($rekening);
    }

    public function createKredit(array $data): Kredit
    {

        // Contoh: Menambahkan logika bisnis tambahan, misal generate NIP otomatis
        // if (!isset($data['nip'])) {
        //     $data['nip'] = $this->generateNip(); // Anda perlu membuat method ini
        // }

        return $this->kreditRepository->create($data);
    }

    public function updateKredit(int $id, array $data): ?Kredit
    {
        $pegawai = $this->kreditRepository->findById($id);

        if (!$pegawai) {
            return null;
        }

        // Contoh: Validasi data sebelum diperbarui
        if (isset($data['jabatan']) && empty($data['jabatan'])) {
            throw new \Exception("Jabatan tidak boleh kosong.");
        }

        return $this->kreditRepository->update($id, $data);
    }

    public function deleteKredit(int $id): bool
    {
        $pegawai = $this->kreditRepository->findById($id);

        if (!$pegawai) {
            return false;
        }

        // Contoh: Logika bisnis sebelum penghapusan, misalnya memeriksa apakah pegawai terkait dengan data lain
        // if ($pegawai->hasRelatedData()) {
        //     throw new \Exception("Pegawai ini memiliki data terkait dan tidak bisa dihapus.");
        // }

        return $this->kreditRepository->delete($id);
    }
}
