<?php

namespace App\Repositories;

use App\Models\Deposito;
use App\Models\ProdukDeposito;
use App\Models\TransaksiDeposito;
use Illuminate\Database\Eloquent\Collection;

class DepositoRepository
{
    protected $deposito;

    public function __construct(Deposito $deposito)
    {
        $this->deposito = $deposito;
    }

    public function getAll(): Collection
    {
        return $this->deposito->with(['anggota', 'produk', 'tabungan'])->get();
    }

    public function findByRekening($rekening): ?Deposito
    {
        return $this->deposito->with(['anggota', 'produk', 'tabungan'])->find($rekening);
    }

    public function findById($id): ?Deposito
    {
        return $this->deposito->with(['anggota', 'produk', 'tabungan'])->find($id);
    }

    public function getLastest(): ?Deposito
    {
        return $this->deposito->latest()->first();
    }

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

    public function findByAnggotaId($anggotaId): Collection
    {
        return $this->deposito->where('anggota_id', $anggotaId)->get();
    }

    public function createDeposito(array $data): Deposito
    {
        return $this->deposito->create($data);
    }

    public function updateDeposito($rekening, array $data): ?Deposito
    {
        $deposito = $this->deposito->find($rekening);
        $deposito->update($data);
        return $deposito;
    }

    public function deleteDeposito($rekening)
    {
        $deposito = $this->deposito->find($rekening);
        if ($deposito) {
            return $deposito->delete();
        }
        return false;
    }

    public function transaksiDeposito(array $data): Deposito
    {
        return TransaksiDeposito::create($data);
    }

    public function deleteTransaksiDeposito($id)
    {
        $transaksi = TransaksiDeposito::find($id);
        if ($transaksi) {
            return $transaksi->delete();
        }
        return false;
    }

    public function getAllProduk(): Collection
    {
        return ProdukDeposito::with('akun_jurnal','akun_biaya_bunga')->get();
    }

    public function findProdukById($id): ?ProdukDeposito
    {
        return ProdukDeposito::find($id)->withRelationshipAutoloading();
    }

    public function createProduk(array $data): ProdukDeposito
    {
        return ProdukDeposito::create($data);
    }

    public function updateProduk($id, array $data): ProdukDeposito
    {
        $produk = ProdukDeposito::find($id);
        $produk->update($data);
        return $produk;
    }

    public function findProdukByNama($nama): ?ProdukDeposito
    {
        return ProdukDeposito::where('nama', $nama)->first()->withRelationshipAutoloading();
    }

    public function deleteProdukDeposito($id)
    {
        $produk = ProdukDeposito::find($id);
        return $produk->delete();
    }
}
