package danielcortes.xyz.models.documentos;

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

public interface DocumentosDAO {

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

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

  /**
   * Obtiene un Documentos dado su Caja
   *
   * @param caja Caja a la que pertence el Documentos
   * @return Un optional que puede contener el Documentos o puede estar vacio
   */
  Optional<Documentos> getByCaja(Caja caja);

  /**
   * Obtiene la suma de los valores de los documentos en una Caja
   *
   * @param caja Caja a la que pertencene los Documentos
   * @return La suma de los valores de los documentos, si la Caja es Caja.EMPYY retorana 0
   */
  int getTotalDocumentos(Caja caja);

  /**
   * Guarda un nuevo documentos, le otorga un id una vez guardado.
   * @param documentos Documentos a guardar
   */
  void insert(Documentos documentos);

  /**
   * Actualiza un documentos
   * @param documentos Documento a actualizar
   */
  void update(Documentos documentos);

  /**
   * Elimina un Documentos.
   * @param documentos Documentos a eliminar
   */
  void delete(Documentos documentos);
}
