using MediaBrowser.Controller.Localization;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Globalization;
using MoreLinq;
using ServiceStack.ServiceHost;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
namespace MediaBrowser.Api
{
    /// 
    /// Class GetCultures
    /// 
    [Route("/Localization/Cultures", "GET")]
    [Api(Description = "Gets known cultures")]
    public class GetCultures : IReturn>
    {
    }
    /// 
    /// Class GetCountries
    /// 
    [Route("/Localization/Countries", "GET")]
    [Api(Description = "Gets known countries")]
    public class GetCountries : IReturn>
    {
    }
    /// 
    /// Class ParentalRatings
    /// 
    [Route("/Localization/ParentalRatings", "GET")]
    [Api(Description = "Gets known parental ratings")]
    public class GetParentalRatings : IReturn>
    {
    }
    /// 
    /// Class CulturesService
    /// 
    public class LocalizationService : BaseApiService
    {
        /// 
        /// Gets the specified request.
        /// 
        /// The request.
        /// System.Object.
        public object Get(GetParentalRatings request)
        {
            var ratings =
                Ratings.RatingsDict.Select(k => new ParentalRating { Name = k.Key, Value = k.Value });
            var result = ratings.OrderBy(p => p.Value).Where(p => p.Value > 0).ToList();
            return ToOptimizedResult(result);
        }
        /// 
        /// Gets the specified request.
        /// 
        /// The request.
        /// System.Object.
        public object Get(GetCountries request)
        {
            var result = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
                .Select(c => new RegionInfo(c.LCID))
                .OrderBy(c => c.DisplayName)
                // Try to eliminate dupes
                .DistinctBy(c => c.TwoLetterISORegionName)
                .Select(c => new CountryInfo
                {
                    Name = c.Name,
                    DisplayName = c.DisplayName,
                    TwoLetterISORegionName = c.TwoLetterISORegionName,
                    ThreeLetterISORegionName = c.ThreeLetterISORegionName
                })
                .ToList();
            return ToOptimizedResult(result);
        }
        /// 
        /// Gets the specified request.
        /// 
        /// The request.
        /// System.Object.
        public object Get(GetCultures request)
        {
            var result = CultureInfo.GetCultures(CultureTypes.AllCultures)
                .OrderBy(c => c.DisplayName)
                // Try to eliminate dupes
                .DistinctBy(c => c.TwoLetterISOLanguageName + c.ThreeLetterISOLanguageName)
                .Select(c => new CultureDto
                {
                    Name = c.Name,
                    DisplayName = c.DisplayName,
                    ThreeLetterISOLanguageName = c.ThreeLetterISOLanguageName,
                    TwoLetterISOLanguageName = c.TwoLetterISOLanguageName
                })
                .ToList();
            return ToOptimizedResult(result);
        }
    }
}