// ------------------------------------------------------------------------------------
// <copyright file="IUsuariosAccion.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 IUsuariosAccion
	/// </summary>
	public interface IUsuariosAccion
	{
		/// <summary>
		/// Metodo guardar usuarios
		/// </summary>
		/// <param name="usuarios">Entidad a guardar</param>
		/// <returns>Respuesta tipo Usuarios </returns>
		Task<Respuesta<IUsuariosDTO>> GuardarUsuariosAsync(IUsuariosDTO usuarios);
		/// <summary>
		/// Metodo Guardar lista usuarios
		/// </summary>
		/// <param name="listaUsuarios">Lista de entidades a guardar</param>
		/// <returns>Respuesta tipo Usuarios </returns>
		Task<Respuesta<IUsuariosDTO>> GuardarListaUsuariosAsync(List<IUsuariosDTO> listaUsuarios);
		/// <summary>
		/// Metodo editar usuarios
		/// </summary>
		/// <param name="usuarios">Entidad a editar</param>
		/// <returns>Respuesta tipo Usuarios </returns>
		Task<Respuesta<IUsuariosDTO>> EditarUsuariosAsync(IUsuariosDTO usuarios);
		/// <summary>
		/// Metodo consultar lista usuarios
		/// </summary>
		/// <returns>Respuesta tipo Usuarios </returns>
		Task<Respuesta<IUsuariosDTO>> ConsultarListaUsuariosAsync();
		/// <summary>
		/// Metodo consultar por llave usuarios
		/// </summary>
		/// <param name="usuarios">Entidad a consultar</param>
		/// <returns>Respuesta tipo Usuarios </returns>
		Task<Respuesta<IUsuariosDTO>> ConsultarUsuariosLlaveAsync(IUsuariosDTO usuarios);
		/// <summary>
		/// Metodo eliminar usuarios
		/// </summary>
		/// <param name="usuarios">Entidad a eliminar</param>
		/// <returns>Respuesta tipo Usuarios </returns>
		Task<Respuesta<IUsuariosDTO>> EliminarUsuariosAsync(IUsuariosDTO usuarios);
	}


	/// <summary>
	/// Interface que define las acciones de la capa de repositorioIUsuariosAccion
	/// </summary>
	public interface IUsuariosRepositorioAccion:IUsuariosAccion
	{
		/// <summary>
		/// Metodo editar usuarios 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 Usuarios </returns>
		Task<Respuesta<IUsuariosDTO>> EditarPorQueryUsuariosAsync(Expression<Func<IUsuariosDTO, bool>> filtro, IUsuariosDTO valor, List<string> propiedades);
		/// <summary>
		/// Metodo consultar lista usuarios por filtro 
		/// </summary>
		/// <param name="filtro">Filtro de las entidades </param>
		/// <returns>Respuesta tipo Usuarios </returns>
		Task<Respuesta<IUsuariosDTO>> ConsultarListaUsuariosPorFiltroAsync(Expression<Func<IUsuariosDTO, bool>> filtro);
		/// <summary>
		/// Metodo editar  usuarios por filtro 
		/// </summary>
		/// <param name="usuarios">Entidad con los datos a editar</param>
		/// <param name="propiedades">Propiedades a modificar</param>
		/// <returns>Respuesta tipo Usuarios </returns>
		Task<Respuesta<IUsuariosDTO>> EditarUsuariosPorFiltroAsync(IUsuariosDTO usuarios, params string[] propiedades);
		/// <summary>
		/// Metodo eliminar lista usuarios 
		/// </summary>
		/// <param name="lista">Lista de entidad a eliminar</param>
		/// <returns>Respuesta tipo Usuarios </returns>
		Task<Respuesta<IUsuariosDTO>> EliminarListaUsuariosAsync(List<IUsuariosDTO> lista);
		/// <summary>
		/// Metodo editar usuarios lista 
		/// </summary>
		/// <param name="lista"> Lista con entidades a modificar</param>
		/// <returns>Respuesta tipo Usuarios </returns>
		Task<Respuesta<IUsuariosDTO>> EditarListaUsuariosAsync(List<IUsuariosDTO> lista);
	}


	/// <summary>
	/// Interface que define las acciones de la capa de negocioIUsuariosAccion
	/// </summary>
	public interface IUsuariosNegocioAccion:IUsuariosAccion
	{
	}
}
