namespace SessionCompanion.Services.Services
{
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;

    using AutoMapper;
    using Microsoft.EntityFrameworkCore;
    using SessionCompanion.Database.Repositories.Base;
    using SessionCompanion.Database.Tables;
    using SessionCompanion.Services.Base;
    using SessionCompanion.Services.Interfaces;
    using SessionCompanion.ViewModels.CharacterOtherEquipmentViewModels;

    public class CharacterOtherEquipmentService : ServiceBase<CharacterOtherEquipmentViewModel, CharacterOtherEquipment>, ICharacterOtherEquipmentService
    {
        public CharacterOtherEquipmentService(IMapper mapper, IRepository<CharacterOtherEquipment> repository) : base(mapper, repository)
        { }

        /// <summary>
        /// Metoda pobiera listę pozostałego ekwipunku konkretnej postaci
        /// </summary>
        /// <param name="characterId"> Id postaci </param>
        /// <returns> Lista pozostałego ekwpinuku posiadanego przez postać </returns>
        public async Task<List<CharacterOtherEquipmentWithDetailsViewModel>> GetCharacterOtherEquipmentList(int characterId)
        {
            var characterWeapons = await Repository.Get().Where(a => a.CharacterId.Equals(characterId)).Include(a => a.OtherEquipment).ToListAsync();

            var result = Mapper.Map<List<CharacterOtherEquipmentWithDetailsViewModel>>(characterWeapons);
            return result;
        }
    }
}