using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WebGridExample.Models;

namespace WebGridExample.Repository
{
    public class SamochodRepository
    {
        List<Samochod> _data = new List<Samochod>();

        public SamochodRepository()
        {
            _data.Add(new Samochod
            {
                ID = 1,
                DataRejestracji = new DateTime(2010, 10, 20),
                Marka = "BMW",
                Model = "3",
                NrRejestracyjny = "DW22211",
                Kolor = "Czerwony"
            });
            _data.Add(new Samochod
            {
                ID = 2,
                DataRejestracji = new DateTime(2011, 10, 20),
                Marka = "BMW",
                Model = "5",
                NrRejestracyjny = "DW22212",
                Kolor = "Czerwony"
            });
            _data.Add(new Samochod
            {
                ID = 3,
                DataRejestracji = new DateTime(2009, 10, 20),
                Marka = "BMW",
                Model = "5",
                NrRejestracyjny = "DW22213",
                Kolor = "Czarny"
            });
            _data.Add(new Samochod
            {
                ID = 4,
                DataRejestracji = new DateTime(2008, 10, 20),
                Marka = "Audi",
                Model = "A4",
                NrRejestracyjny = "DW32211",
                Kolor = "Srebrny"
            });
            _data.Add(new Samochod
            {
                ID = 5,
                DataRejestracji = new DateTime(2007, 10, 20),
                Marka = "Audi",
                Model = "A4",
                NrRejestracyjny = "DW32212",
                Kolor = "Niebieski"
            });
            _data.Add(new Samochod
            {
                ID = 6,
                DataRejestracji = new DateTime(2010, 10, 20),
                Marka = "Audi",
                Model = "A6",
                NrRejestracyjny = "DW32213",
                Kolor = "Czarny"
            });
            _data.Add(new Samochod
            {
                ID = 7,
                DataRejestracji = new DateTime(2012, 10, 20),
                Marka = "Audi",
                Model = "A7",
                NrRejestracyjny = "DW32214",
                Kolor = "Srebrny"
            });
            _data.Add(new Samochod
            {
                ID = 8,
                DataRejestracji = new DateTime(2012, 10, 20),
                Marka = "Audi",
                Model = "A8",
                NrRejestracyjny = "DW32215",
                Kolor = "Czarny"
            });
            _data.Add(new Samochod
            {
                ID = 9,
                DataRejestracji = new DateTime(2011, 10, 20),
                Marka = "Mercedes",
                Model = "C",
                NrRejestracyjny = "DW42211",
                Kolor = "Czarny"
            });
            _data.Add(new Samochod
            {
                ID = 10,
                DataRejestracji = new DateTime(2008, 10, 20),
                Marka = "Mercedes",
                Model = "C",
                NrRejestracyjny = "DW42212",
                Kolor = "Czerwony"
            });
            _data.Add(new Samochod
            {
                ID = 11,
                DataRejestracji = new DateTime(2013, 10, 20),
                Marka = "Mercedes",
                Model = "E",
                NrRejestracyjny = "DW42213",
                Kolor = "Purpurowy"
            });
            _data.Add(new Samochod
            {
                ID = 12,
                DataRejestracji = new DateTime(2009, 10, 20),
                Marka = "Mercedes",
                Model = "S",
                NrRejestracyjny = "DW42214",
                Kolor = "Czarny"
            });
            _data.Add(new Samochod
            {
                ID = 13,
                DataRejestracji = new DateTime(2010, 10, 20),
                Marka = "Subaru",
                Model = "Forester",
                NrRejestracyjny = "DW52211",
                Kolor = "Czarny"
            });
            _data.Add(new Samochod
            {
                ID = 14,
                DataRejestracji = new DateTime(2013, 10, 20),
                Marka = "Subaru",
                Model = "Forester",
                NrRejestracyjny = "DW52212",
                Kolor = "Srebrny"
            });
        }

        public List<Samochod> GetAll()
        {
            return _data;
        }

        public List<Samochod> GetPage(int pageNumber, int pageSize, string sort, string sortDir)
        {
            var allItems = _data;
            if (sortDir == "ASC")
            {
                switch (sort)
                {
                    case "DataRejestracji": allItems = allItems.OrderBy(k => k.DataRejestracji).ToList(); break;
                    case "ID": allItems = allItems.OrderBy(k => k.ID).ToList(); break;
                    case "Kolor": allItems = allItems.OrderBy(k => k.Kolor).ToList(); break;
                    case "Marka": allItems = allItems.OrderBy(k => k.Marka).ToList(); break;
                    case "Model": allItems = allItems.OrderBy(k => k.Model).ToList(); break;
                    case "NrRejestracyjny": allItems = allItems.OrderBy(k => k.NrRejestracyjny).ToList(); break;
                }
            }
            else
            {
                switch (sort)
                {
                    case "DataRejestracji": allItems = allItems.OrderByDescending(k => k.DataRejestracji).ToList(); break;
                    case "ID": allItems = allItems.OrderByDescending(k => k.ID).ToList(); break;
                    case "Kolor": allItems = allItems.OrderByDescending(k => k.Kolor).ToList(); break;
                    case "Marka": allItems = allItems.OrderByDescending(k => k.Marka).ToList(); break;
                    case "Model": allItems = allItems.OrderByDescending(k => k.Model).ToList(); break;
                    case "NrRejestracyjny": allItems = allItems.OrderByDescending(k => k.NrRejestracyjny).ToList(); break;
                }
            }

            return allItems.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();
        }

        public int GetTotalRowCount()
        {
            return _data.Count();
        }
    }
}