<?php

namespace App\Dominios\Clientes\Repositories;

use App\Dominios\Clientes\Models\Cliente;
use App\Dominios\Clientes\Interfaces\ClienteRepositoryInterface;
use App\Dominios\Clientes\DTO\AtualizarClienteDTO;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Database\Eloquent\ModelNotFoundException;

class ClienteRepository implements ClienteRepositoryInterface
{
    public function __construct(
        private readonly Cliente $model
    ) {}

    public function criar(array $dados): Cliente
    {
        return $this->model->create($dados);
    }

    public function todos(): Collection
    {
        return $this->model->all();
    }

    public function paginados(int $perPage = 15): LengthAwarePaginator
    {
        return $this->model->paginate($perPage);
    }

    public function atualizar(int $id, AtualizarClienteDTO $dto): Cliente
    {
        $cliente = $this->model->find($id);
        
        if (!$cliente) {
            throw new ModelNotFoundException("Cliente não encontrado");
        }

        $cliente->update($dto->toArray());
        
        return $cliente;
    }

    public function remover(int $id): void
    {
        $cliente = $this->model->find($id);
        
        if (!$cliente) {
            throw new ModelNotFoundException("Cliente não encontrado");
        }

        $cliente->delete();
    }

    public function todosComExcluidos(): Collection
    {
        return $this->model->withTrashed()->get();
    }

    public function apenasExcluidos(): Collection
    {
        return $this->model->onlyTrashed()->get();
    }
} 