<?php

namespace App\Services;

use App\Models\Restaurante;
use App\Models\RestauranteImagem;
use App\Repositories\RestauranteRepository;
use Illuminate\Http\UploadedFile;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Facades\Storage;

class RestauranteService
{
    public function __construct(
        private readonly RestauranteRepository $repository,
    ) {}

    public function listar(array $filtros): LengthAwarePaginator
    {
        return $this->repository->listar($filtros);
    }

    public function proximos(float $lat, float $lng, float $raioKm, array $filtros): LengthAwarePaginator
    {
        return $this->repository->proximos($lat, $lng, $raioKm, $filtros);
    }

    public function buscarPorId(int $id): Restaurante
    {
        return $this->repository->buscarComDetalhes($id);
    }

    public function criar(array $dados): Restaurante
    {
        return $this->repository->criar($dados);
    }

    public function atualizar(Restaurante $restaurante, array $dados): Restaurante
    {
        return $this->repository->atualizar($restaurante, $dados);
    }

    public function deletar(Restaurante $restaurante): void
    {
        $this->repository->deletar($restaurante);
    }

    public function adicionarImagem(Restaurante $restaurante, UploadedFile $arquivo): RestauranteImagem
    {
        $path = $arquivo->store('restaurantes', 'public');
        $url  = Storage::url($path);
        $ordem = $restaurante->imagens()->count() + 1;

        return $restaurante->imagens()->create([
            'path'  => $path,
            'url'   => $url,
            'ordem' => $ordem,
        ]);
    }
}
