using System.Collections.Generic;
using System.Linq;
using NzbDrone.Core.Model;

namespace NzbDrone.Core.Helpers
{
    public static class EpisodeSortingHelper
    {
        private static readonly List<EpisodeSortingType> SeparatorStyles = new List<EpisodeSortingType>
                                                                               {
                                                                                   new EpisodeSortingType
                                                                                       {
                                                                                           Id = 0,
                                                                                           Name = "Dash",
                                                                                           Pattern = " - "
                                                                                       },
                                                                                   new EpisodeSortingType
                                                                                       {
                                                                                           Id = 1,
                                                                                           Name = "Space",
                                                                                           Pattern = " "
                                                                                       },
                                                                                    new EpisodeSortingType
                                                                                       {
                                                                                           Id = 2,
                                                                                           Name = "Period",
                                                                                           Pattern = "."
                                                                                       }
                                                                               };

        private static readonly List<EpisodeSortingType> NumberStyles = new List<EpisodeSortingType>
                                                                            {
                                                                                new EpisodeSortingType
                                                                                    {
                                                                                        Id = 0,
                                                                                        Name = "1x05",
                                                                                        Pattern = "%sx%0e",
                                                                                        EpisodeSeparator = "x"

                                                                                    },
                                                                                new EpisodeSortingType
                                                                                    {
                                                                                        Id = 1,
                                                                                        Name = "01x05",
                                                                                        Pattern = "%0sx%0e",
                                                                                        EpisodeSeparator = "x"
                                                                                    },
                                                                                new EpisodeSortingType
                                                                                    {
                                                                                        Id = 2,
                                                                                        Name = "S01E05",
                                                                                        Pattern = "S%0sE%0e",
                                                                                        EpisodeSeparator = "E"
                                                                                    },
                                                                                new EpisodeSortingType
                                                                                    {
                                                                                        Id = 3,
                                                                                        Name = "s01e05",
                                                                                        Pattern = "s%0se%0e",
                                                                                        EpisodeSeparator = "e"
                                                                                    }
                                                                            };

        private static readonly List<EpisodeSortingType> MultiEpisodeStyles = new List<EpisodeSortingType>
                                                                                  {
                                                                                      new EpisodeSortingType
                                                                                          {
                                                                                              Id = 0,
                                                                                              Name = "Extend",
                                                                                              Pattern = "-%0e"
                                                                                          },
                                                                                      new EpisodeSortingType
                                                                                          {
                                                                                              Id = 1,
                                                                                              Name = "Duplicate",
                                                                                              Pattern = "%p%0s%x%0e"
                                                                                          },
                                                                                      new EpisodeSortingType
                                                                                          {
                                                                                              Id = 2,
                                                                                              Name = "Repeat",
                                                                                              Pattern = "%x%0e"
                                                                                          },
                                                                                        new EpisodeSortingType
                                                                                          {
                                                                                              Id = 3,
                                                                                              Name = "Scene",
                                                                                              Pattern = "-%x%0e"
                                                                                          }
                                                                                  };

        public static List<EpisodeSortingType> GetSeparatorStyles()
        {
            return SeparatorStyles;
        }

        public static List<EpisodeSortingType> GetNumberStyles()
        {
            return NumberStyles;
        }

        public static List<EpisodeSortingType> GetMultiEpisodeStyles()
        {
            return MultiEpisodeStyles;
        }

        public static EpisodeSortingType GetSeparatorStyle(int id)
        {
            return SeparatorStyles.Single(s => s.Id == id);
        }

        public static EpisodeSortingType GetNumberStyle(int id)
        {
            return NumberStyles.Single(s => s.Id == id);
        }

        public static EpisodeSortingType GetMultiEpisodeStyle(int id)
        {
            return MultiEpisodeStyles.Single(s => s.Id == id);
        }

        public static EpisodeSortingType GetSeparatorStyle(string name)
        {
            return SeparatorStyles.Single(s => s.Name == name);
        }

        public static EpisodeSortingType GetNumberStyle(string name)
        {
            return NumberStyles.Single(s => s.Name == name);
        }

        public static EpisodeSortingType GetMultiEpisodeStyle(string name)
        {
            return MultiEpisodeStyles.Single(s => s.Name == name);
        }
    }
}