using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Namordnik.Class
{
    class PaginationClass : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        static int countitems = 4;
        public int[] NPage { get; set; } = new int[countitems];
        public string[] Visible { get; set; } = new string[countitems];
        public string[] Bold { get; set; } = new string[countitems];
        int countpages;

        public int CountPages
        {
            get => countpages;
            set
            {
                countpages = value;
                for (int i = 1; i < countitems; i++)
                {
                    if (CountPages <= i)
                    {
                        Visible[i] = "Hidden";
                    }
                    else
                    {
                        Visible[i] = "Visible";
                    }
                }
            }
        }

        int countpage;
        public int CountPage
        {
            get => countpage;
            set
            {
                countpage = value;
                if (Countlist % value == 0)
                {
                    CountPages = Countlist / value;
                }
                else
                {
                    CountPages = Countlist / value + 1;
                }
            }
        }

        int countlist;

        public int Countlist
        {
            get => countlist;
            set
            {
                countlist = value;
                if (value % CountPage == 0)
                {
                    CountPages = value / CountPage;
                }
                else
                {
                    CountPages = 1 + value / CountPage;
                }
            }
        }

        int currentpage;
        public int CurrentPage
        {
            get => currentpage;
            set
            {
                currentpage = value;
                if (currentpage < 1)
                {
                    currentpage = 1;
                }
                if (currentpage >= CountPages)
                {
                    currentpage = CountPages;
                }

                for (int i = 0; i < countitems; i++)
                {
                    if (currentpage < (1 + countitems / 2) || CountPages < countitems) NPage[i] = i + 1;
                    else if (currentpage > CountPages - (countitems / 2 + 1)) NPage[i] = CountPages - (countitems - 1) + i;
                    else NPage[i] = currentpage + i - (countitems / 2);
                }
                for (int i = 0; i < countitems; i++)
                {
                    if (NPage[i] == currentpage) Bold[i] = "ExtraBold";
                    else Bold[i] = "Regular";
                }

                PropertyChanged(this, new PropertyChangedEventArgs("NPage"));
                PropertyChanged(this, new PropertyChangedEventArgs("Visible"));
                PropertyChanged(this, new PropertyChangedEventArgs("Bold"));
            }
        }
        public PaginationClass() // контруктор
        {
            for (int i = 0; i < countitems; i++)
            {
                Visible[i] = "Visible";
                NPage[i] = i + 1;
                Bold[i] = "Regular";
            }
            currentpage = 1;
            countpage = 1;
            countlist = 1;
        }
    }
}
