// ------------------------------------------------------------------------------------
// <copyright file="IIsbnAccion.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 IIsbnAccion
	/// </summary>
	public interface IIsbnAccion
	{
		/// <summary>
		/// Metodo guardar isbn
		/// </summary>
		/// <param name="isbn">Entidad a guardar</param>
		/// <returns>Respuesta tipo Isbn </returns>
		Task<Respuesta<IIsbnDTO>> GuardarIsbnAsync(IIsbnDTO isbn);
		/// <summary>
		/// Metodo Guardar lista isbn
		/// </summary>
		/// <param name="listaIsbn">Lista de entidades a guardar</param>
		/// <returns>Respuesta tipo Isbn </returns>
		Task<Respuesta<IIsbnDTO>> GuardarListaIsbnAsync(List<IIsbnDTO> listaIsbn);
		/// <summary>
		/// Metodo editar isbn
		/// </summary>
		/// <param name="isbn">Entidad a editar</param>
		/// <returns>Respuesta tipo Isbn </returns>
		Task<Respuesta<IIsbnDTO>> EditarIsbnAsync(IIsbnDTO isbn);
		/// <summary>
		/// Metodo consultar lista isbn
		/// </summary>
		/// <returns>Respuesta tipo Isbn </returns>
		Task<Respuesta<IIsbnDTO>> ConsultarListaIsbnAsync();
		/// <summary>
		/// Metodo consultar por llave isbn
		/// </summary>
		/// <param name="isbn">Entidad a consultar</param>
		/// <returns>Respuesta tipo Isbn </returns>
		Task<Respuesta<IIsbnDTO>> ConsultarIsbnLlaveAsync(IIsbnDTO isbn);
		/// <summary>
		/// Metodo eliminar isbn
		/// </summary>
		/// <param name="isbn">Entidad a eliminar</param>
		/// <returns>Respuesta tipo Isbn </returns>
		Task<Respuesta<IIsbnDTO>> EliminarIsbnAsync(IIsbnDTO isbn);
	}


	/// <summary>
	/// Interface que define las acciones de la capa de repositorioIIsbnAccion
	/// </summary>
	public interface IIsbnRepositorioAccion:IIsbnAccion
	{
		/// <summary>
		/// Metodo editar isbn 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 Isbn </returns>
		Task<Respuesta<IIsbnDTO>> EditarPorQueryIsbnAsync(Expression<Func<IIsbnDTO, bool>> filtro, IIsbnDTO valor, List<string> propiedades);
		/// <summary>
		/// Metodo consultar lista isbn por filtro 
		/// </summary>
		/// <param name="filtro">Filtro de las entidades </param>
		/// <returns>Respuesta tipo Isbn </returns>
		Task<Respuesta<IIsbnDTO>> ConsultarListaIsbnPorFiltroAsync(Expression<Func<IIsbnDTO, bool>> filtro);
		/// <summary>
		/// Metodo editar  isbn por filtro 
		/// </summary>
		/// <param name="isbn">Entidad con los datos a editar</param>
		/// <param name="propiedades">Propiedades a modificar</param>
		/// <returns>Respuesta tipo Isbn </returns>
		Task<Respuesta<IIsbnDTO>> EditarIsbnPorFiltroAsync(IIsbnDTO isbn, params string[] propiedades);
		/// <summary>
		/// Metodo eliminar lista isbn 
		/// </summary>
		/// <param name="lista">Lista de entidad a eliminar</param>
		/// <returns>Respuesta tipo Isbn </returns>
		Task<Respuesta<IIsbnDTO>> EliminarListaIsbnAsync(List<IIsbnDTO> lista);
		/// <summary>
		/// Metodo editar isbn lista 
		/// </summary>
		/// <param name="lista"> Lista con entidades a modificar</param>
		/// <returns>Respuesta tipo Isbn </returns>
		Task<Respuesta<IIsbnDTO>> EditarListaIsbnAsync(List<IIsbnDTO> lista);
	}


	/// <summary>
	/// Interface que define las acciones de la capa de negocioIIsbnAccion
	/// </summary>
	public interface IIsbnNegocioAccion:IIsbnAccion
	{
	}
}
