<?php

namespace App\Repositories;

use App\Models\Bank;
use App\Models\PenempatanBank;
use Illuminate\Database\Eloquent\Collection;

class PenempatanBankRepository
{
    protected $penempatan_bank;

    public function __construct(PenempatanBank $penempatan_bank)
    {
        $this->penempatan_bank = $penempatan_bank;
    }

    public function getAll(): Collection
    {
        return $this->penempatan_bank->with('jurnal', 'bank')->get();
    }

    public function findById(string $id): ?PenempatanBank
    {
        return $this->penempatan_bank->with('jurnal', 'bank')->find($id);
    }

    public function findByNama(string $nama): ?PenempatanBank
    {
        return $this->penempatan_bank->where('nama', $nama)->first();
    }

    public function findByRekening($rekening): ?PenempatanBank
    {
        return $this->penempatan_bank->where('rekening', $rekening)->first();
    }

    public function create(array $data): PenempatanBank
    {
        return $this->penempatan_bank->create($data);
    }

    public function update(string $id, array $data): ?PenempatanBank
    {
        $penempatan_bank = $this->findById($id);
        if ($penempatan_bank) {
            $penempatan_bank->update($data);
        }
        return $penempatan_bank;
    }

    public function getLastest()
    {
        return $this->penempatan_bank->latest()->first();
    }

    public function count()
    {
        return $this->penempatan_bank->all()->count();
    }

    public function delete(string $id): bool
    {
        $penempatan = $this->findById($id);
        $penempatan->status = 9;
        $penempatan->save();
        return false;
    }

    public function getAllBank(): Collection
    {
        return Bank::all();
    }

    public function findBankById($id): ?Bank
    {
        return Bank::find($id);
    }

    public function findBankByName($nama): ?Bank
    {
        return Bank::where('nama', $nama)->first();
    }

    public function createBank(array $data): Bank
    {
        return Bank::create($data);
    }

    public function updateBank(int $id, array $data): ?Bank
    {
        $bank = Bank::find($id);
        $bank->update($data);
        return $bank;
    }

    public function deleteBank($id)
    {
        return Bank::find($id)->delete();
    }
}
