package danielcortes.xyz.models.caja;

import java.time.LocalDate;
import java.util.List;
import java.util.Optional;

public interface CajaDAO {

  /**
   * Obtiene todas las cajas
   * @return Una lista que contiene las cajas
   */
  List<Caja> getAll();

  /**
   * Obtiene una caja por su id
   * @param id ID de la caja
   * @return Optional que puede contener la Caja o puede estar vacio.
   */
  Optional<Caja> getById(int id);

  /**
   * Obtiene una caja dada su fecha
   * @param fecha Fecha a la que pertence la caja
   * @return Un optional que puede contenter una caja o puede estar vacio
   */
  Optional<Caja> getByFecha(LocalDate fecha);

  /**
   * Guarda una caja, le otorga un id a la caja guardada
   * @param caja Caja a guardar
   */
  void insert(Caja caja);

  /**
   * Actualiza una caja
   * @param caja Caja actualizar
   */
  void update(Caja caja);
}
