// ------------------------------------------------------------------------------------
// <copyright file="ITiposDocumentoAccion.cs" company="Universidad Distrital">
// Copyright (c) Universidad Distrital. All rights reserved.
// </copyright>
// <author>Camilo Prieto</author>
// ------------------------------------------------------------------------------------
namespace Biblioteca.IC.Acciones.Repositorio
{
	using System;
	using System.Collections.Generic;
	using System.Linq.Expressions;
	using System.Threading.Tasks;
	using UtilitariosNet.Clases.Comunes.Entidades;
	using Biblioteca.IC.DTO.Repositorio;

	/// <summary>
	/// Interface que define las acciones que se implmentara en todas las capas de ITiposDocumentoAccion
	/// </summary>
	public interface ITiposDocumentoAccion
	{
		/// <summary>
		/// Metodo guardar tiposDocumento
		/// </summary>
		/// <param name="tiposDocumento">Entidad a guardar</param>
		/// <returns>Respuesta tipo TiposDocumento </returns>
		Task<Respuesta<ITiposDocumentoDTO>> GuardarTiposDocumentoAsync(ITiposDocumentoDTO tiposDocumento);
		/// <summary>
		/// Metodo Guardar lista tiposDocumento
		/// </summary>
		/// <param name="listaTiposDocumento">Lista de entidades a guardar</param>
		/// <returns>Respuesta tipo TiposDocumento </returns>
		Task<Respuesta<ITiposDocumentoDTO>> GuardarListaTiposDocumentoAsync(List<ITiposDocumentoDTO> listaTiposDocumento);
		/// <summary>
		/// Metodo editar tiposDocumento
		/// </summary>
		/// <param name="tiposDocumento">Entidad a editar</param>
		/// <returns>Respuesta tipo TiposDocumento </returns>
		Task<Respuesta<ITiposDocumentoDTO>> EditarTiposDocumentoAsync(ITiposDocumentoDTO tiposDocumento);
		/// <summary>
		/// Metodo consultar lista tiposDocumento
		/// </summary>
		/// <returns>Respuesta tipo TiposDocumento </returns>
		Task<Respuesta<ITiposDocumentoDTO>> ConsultarListaTiposDocumentoAsync();
		/// <summary>
		/// Metodo consultar por llave tiposDocumento
		/// </summary>
		/// <param name="tiposDocumento">Entidad a consultar</param>
		/// <returns>Respuesta tipo TiposDocumento </returns>
		Task<Respuesta<ITiposDocumentoDTO>> ConsultarTiposDocumentoLlaveAsync(ITiposDocumentoDTO tiposDocumento);
		/// <summary>
		/// Metodo eliminar tiposDocumento
		/// </summary>
		/// <param name="tiposDocumento">Entidad a eliminar</param>
		/// <returns>Respuesta tipo TiposDocumento </returns>
		Task<Respuesta<ITiposDocumentoDTO>> EliminarTiposDocumentoAsync(ITiposDocumentoDTO tiposDocumento);
	}


	/// <summary>
	/// Interface que define las acciones de la capa de repositorioITiposDocumentoAccion
	/// </summary>
	public interface ITiposDocumentoRepositorioAccion:ITiposDocumentoAccion
	{
		/// <summary>
		/// Metodo editar tiposDocumento por query 
		/// </summary>
		/// <param name="filtro">Filtro de las entidades </param>
		/// <param name="valor">Entidad a mofificar</param>
		/// <param name="propiedades">Propiedades a modificar</param>
		/// <returns>Respuesta tipo TiposDocumento </returns>
		Task<Respuesta<ITiposDocumentoDTO>> EditarPorQueryTiposDocumentoAsync(Expression<Func<ITiposDocumentoDTO, bool>> filtro, ITiposDocumentoDTO valor, List<string> propiedades);
		/// <summary>
		/// Metodo consultar lista tiposDocumento por filtro 
		/// </summary>
		/// <param name="filtro">Filtro de las entidades </param>
		/// <returns>Respuesta tipo TiposDocumento </returns>
		Task<Respuesta<ITiposDocumentoDTO>> ConsultarListaTiposDocumentoPorFiltroAsync(Expression<Func<ITiposDocumentoDTO, bool>> filtro);
		/// <summary>
		/// Metodo editar  tiposDocumento por filtro 
		/// </summary>
		/// <param name="tiposDocumento">Entidad con los datos a editar</param>
		/// <param name="propiedades">Propiedades a modificar</param>
		/// <returns>Respuesta tipo TiposDocumento </returns>
		Task<Respuesta<ITiposDocumentoDTO>> EditarTiposDocumentoPorFiltroAsync(ITiposDocumentoDTO tiposDocumento, params string[] propiedades);
		/// <summary>
		/// Metodo eliminar lista tiposDocumento 
		/// </summary>
		/// <param name="lista">Lista de entidad a eliminar</param>
		/// <returns>Respuesta tipo TiposDocumento </returns>
		Task<Respuesta<ITiposDocumentoDTO>> EliminarListaTiposDocumentoAsync(List<ITiposDocumentoDTO> lista);
		/// <summary>
		/// Metodo editar tiposDocumento lista 
		/// </summary>
		/// <param name="lista"> Lista con entidades a modificar</param>
		/// <returns>Respuesta tipo TiposDocumento </returns>
		Task<Respuesta<ITiposDocumentoDTO>> EditarListaTiposDocumentoAsync(List<ITiposDocumentoDTO> lista);
	}


	/// <summary>
	/// Interface que define las acciones de la capa de negocioITiposDocumentoAccion
	/// </summary>
	public interface ITiposDocumentoNegocioAccion:ITiposDocumentoAccion
	{
	}
}
