<?php

namespace App\Services;

use App\Models\Anggota;
use App\Repositories\AnggotaRepository;

class AnggotaService
{
    protected $anggotaRepository;

    public function __construct(AnggotaRepository $anggotaRepository)
    {
        $this->anggotaRepository = $anggotaRepository;
    }

    public function getAllAnggota()
    {
        return $this->anggotaRepository->getAll();
    }

    public function findById($id)
    {
        return $this->anggotaRepository->findById($id);
    }

    public function createAnggota(array $data)
    {
        $anggota = $this->anggotaRepository->findByNIK($data['nik']);
        if ($anggota) {
            throw new \Exception('duplikat NIK');
        };

        $count = $this->anggotaRepository->count();
        $data['id'] = "A" . str_pad($count + 1, 5, "0", STR_PAD_LEFT);

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

    public function updateAnggota($id, array $data): Anggota
    {
        $anggota = $this->anggotaRepository->findById($id);
        if (!$anggota) {
            throw new \Exception('Anggota tidak ditemukan');
        }
        if ($data['nik'] && $data['nik'] != $anggota->nik) {
            $anggota_nik = $this->anggotaRepository->findByNIK($data['nik']);
            if ($anggota_nik) {
                throw new \Exception('duplikat NIK');
            };
        }

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

    public function deleteAnggota($id)
    {
        return $this->anggotaRepository->delete($id);
    }
}
