// ------------------------------------------------------------------------------------
// <copyright file="ICiudadesAccion.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 ICiudadesAccion
	/// </summary>
	public interface ICiudadesAccion
	{
		/// <summary>
		/// Metodo guardar ciudades
		/// </summary>
		/// <param name="ciudades">Entidad a guardar</param>
		/// <returns>Respuesta tipo Ciudades </returns>
		Task<Respuesta<ICiudadesDTO>> GuardarCiudadesAsync(ICiudadesDTO ciudades);
		/// <summary>
		/// Metodo Guardar lista ciudades
		/// </summary>
		/// <param name="listaCiudades">Lista de entidades a guardar</param>
		/// <returns>Respuesta tipo Ciudades </returns>
		Task<Respuesta<ICiudadesDTO>> GuardarListaCiudadesAsync(List<ICiudadesDTO> listaCiudades);
		/// <summary>
		/// Metodo editar ciudades
		/// </summary>
		/// <param name="ciudades">Entidad a editar</param>
		/// <returns>Respuesta tipo Ciudades </returns>
		Task<Respuesta<ICiudadesDTO>> EditarCiudadesAsync(ICiudadesDTO ciudades);
		/// <summary>
		/// Metodo consultar lista ciudades
		/// </summary>
		/// <returns>Respuesta tipo Ciudades </returns>
		Task<Respuesta<ICiudadesDTO>> ConsultarListaCiudadesAsync();
		/// <summary>
		/// Metodo consultar por llave ciudades
		/// </summary>
		/// <param name="ciudades">Entidad a consultar</param>
		/// <returns>Respuesta tipo Ciudades </returns>
		Task<Respuesta<ICiudadesDTO>> ConsultarCiudadesLlaveAsync(ICiudadesDTO ciudades);
		/// <summary>
		/// Metodo eliminar ciudades
		/// </summary>
		/// <param name="ciudades">Entidad a eliminar</param>
		/// <returns>Respuesta tipo Ciudades </returns>
		Task<Respuesta<ICiudadesDTO>> EliminarCiudadesAsync(ICiudadesDTO ciudades);
	}


	/// <summary>
	/// Interface que define las acciones de la capa de repositorioICiudadesAccion
	/// </summary>
	public interface ICiudadesRepositorioAccion:ICiudadesAccion
	{
		/// <summary>
		/// Metodo editar ciudades 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 Ciudades </returns>
		Task<Respuesta<ICiudadesDTO>> EditarPorQueryCiudadesAsync(Expression<Func<ICiudadesDTO, bool>> filtro, ICiudadesDTO valor, List<string> propiedades);
		/// <summary>
		/// Metodo consultar lista ciudades por filtro 
		/// </summary>
		/// <param name="filtro">Filtro de las entidades </param>
		/// <returns>Respuesta tipo Ciudades </returns>
		Task<Respuesta<ICiudadesDTO>> ConsultarListaCiudadesPorFiltroAsync(Expression<Func<ICiudadesDTO, bool>> filtro);
		/// <summary>
		/// Metodo editar  ciudades por filtro 
		/// </summary>
		/// <param name="ciudades">Entidad con los datos a editar</param>
		/// <param name="propiedades">Propiedades a modificar</param>
		/// <returns>Respuesta tipo Ciudades </returns>
		Task<Respuesta<ICiudadesDTO>> EditarCiudadesPorFiltroAsync(ICiudadesDTO ciudades, params string[] propiedades);
		/// <summary>
		/// Metodo eliminar lista ciudades 
		/// </summary>
		/// <param name="lista">Lista de entidad a eliminar</param>
		/// <returns>Respuesta tipo Ciudades </returns>
		Task<Respuesta<ICiudadesDTO>> EliminarListaCiudadesAsync(List<ICiudadesDTO> lista);
		/// <summary>
		/// Metodo editar ciudades lista 
		/// </summary>
		/// <param name="lista"> Lista con entidades a modificar</param>
		/// <returns>Respuesta tipo Ciudades </returns>
		Task<Respuesta<ICiudadesDTO>> EditarListaCiudadesAsync(List<ICiudadesDTO> lista);
	}


	/// <summary>
	/// Interface que define las acciones de la capa de negocioICiudadesAccion
	/// </summary>
	public interface ICiudadesNegocioAccion:ICiudadesAccion
	{
	}
}
