// ------------------------------------------------------------------------------------
// <copyright file="IPaisesAccion.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 IPaisesAccion
	/// </summary>
	public interface IPaisesAccion
	{
		/// <summary>
		/// Metodo guardar paises
		/// </summary>
		/// <param name="paises">Entidad a guardar</param>
		/// <returns>Respuesta tipo Paises </returns>
		Task<Respuesta<IPaisesDTO>> GuardarPaisesAsync(IPaisesDTO paises);
		/// <summary>
		/// Metodo Guardar lista paises
		/// </summary>
		/// <param name="listaPaises">Lista de entidades a guardar</param>
		/// <returns>Respuesta tipo Paises </returns>
		Task<Respuesta<IPaisesDTO>> GuardarListaPaisesAsync(List<IPaisesDTO> listaPaises);
		/// <summary>
		/// Metodo editar paises
		/// </summary>
		/// <param name="paises">Entidad a editar</param>
		/// <returns>Respuesta tipo Paises </returns>
		Task<Respuesta<IPaisesDTO>> EditarPaisesAsync(IPaisesDTO paises);
		/// <summary>
		/// Metodo consultar lista paises
		/// </summary>
		/// <returns>Respuesta tipo Paises </returns>
		Task<Respuesta<IPaisesDTO>> ConsultarListaPaisesAsync();
		/// <summary>
		/// Metodo consultar por llave paises
		/// </summary>
		/// <param name="paises">Entidad a consultar</param>
		/// <returns>Respuesta tipo Paises </returns>
		Task<Respuesta<IPaisesDTO>> ConsultarPaisesLlaveAsync(IPaisesDTO paises);
		/// <summary>
		/// Metodo eliminar paises
		/// </summary>
		/// <param name="paises">Entidad a eliminar</param>
		/// <returns>Respuesta tipo Paises </returns>
		Task<Respuesta<IPaisesDTO>> EliminarPaisesAsync(IPaisesDTO paises);
	}


	/// <summary>
	/// Interface que define las acciones de la capa de repositorioIPaisesAccion
	/// </summary>
	public interface IPaisesRepositorioAccion:IPaisesAccion
	{
		/// <summary>
		/// Metodo editar paises 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 Paises </returns>
		Task<Respuesta<IPaisesDTO>> EditarPorQueryPaisesAsync(Expression<Func<IPaisesDTO, bool>> filtro, IPaisesDTO valor, List<string> propiedades);
		/// <summary>
		/// Metodo consultar lista paises por filtro 
		/// </summary>
		/// <param name="filtro">Filtro de las entidades </param>
		/// <returns>Respuesta tipo Paises </returns>
		Task<Respuesta<IPaisesDTO>> ConsultarListaPaisesPorFiltroAsync(Expression<Func<IPaisesDTO, bool>> filtro);
		/// <summary>
		/// Metodo editar  paises por filtro 
		/// </summary>
		/// <param name="paises">Entidad con los datos a editar</param>
		/// <param name="propiedades">Propiedades a modificar</param>
		/// <returns>Respuesta tipo Paises </returns>
		Task<Respuesta<IPaisesDTO>> EditarPaisesPorFiltroAsync(IPaisesDTO paises, params string[] propiedades);
		/// <summary>
		/// Metodo eliminar lista paises 
		/// </summary>
		/// <param name="lista">Lista de entidad a eliminar</param>
		/// <returns>Respuesta tipo Paises </returns>
		Task<Respuesta<IPaisesDTO>> EliminarListaPaisesAsync(List<IPaisesDTO> lista);
		/// <summary>
		/// Metodo editar paises lista 
		/// </summary>
		/// <param name="lista"> Lista con entidades a modificar</param>
		/// <returns>Respuesta tipo Paises </returns>
		Task<Respuesta<IPaisesDTO>> EditarListaPaisesAsync(List<IPaisesDTO> lista);
	}


	/// <summary>
	/// Interface que define las acciones de la capa de negocioIPaisesAccion
	/// </summary>
	public interface IPaisesNegocioAccion:IPaisesAccion
	{
	}
}
