package danielcortes.xyz.models.calculo_fondo;

import danielcortes.xyz.models.caja.Caja;
import java.util.List;
import java.util.Optional;

public interface CalculoFondoDAO {

  /**
   * Obtiene todos los CalculoFondo
   * @return Una lista con los CalculoFondo
   */
  List<CalculoFondo> getAll();

  /**
   * Obtiene una lista con los CalculoFondo de una Caja
   * @param caja Caja a la que pertencen los CalculoFondo
   * @return Una lista con los CalculoFondo
   */
  List<CalculoFondo> getByCaja(Caja caja);

  /**
   * Obtiene un CalculoFondo dado su Id.
   * @param id Id del CalculoFondo
   * @return Un optional que puede contener el Calculo fondo o puede estar vacio.
   */
  Optional<CalculoFondo> getById(int id);

  /**
   * Obtiene la suma de los valores del CalculoFondo de una Caja.
   * @param caja Caja a la que pertencen los CalculoFondo a sumar
   * @return La suma de los valores. En caso que la caja sea Caja.EMPTY retornara 0
   */
  int getTotalCalculoFondo(Caja caja);

  /**
   * Guarda un CalculoFondo, le otorga un id una vez guardada.
   * @param calculoFondo CalculoFondo a guardar
   */
  void insert(CalculoFondo calculoFondo);

  /**
   * Actualiza un CalculoFondo
   * @param calculoFondo CalculoFondo a actualizar
   */
  void update(CalculoFondo calculoFondo);

  /**
   * Elimina un CalculoFondo
   * @param calculoFondo CalculoFondo a eliminar
   */
  void delete(CalculoFondo calculoFondo);
}
