# -*- coding: utf-8 -*-
__author__ = 'SDE'

def get_paging_Dict(request, elements_count, elements_on_page, from_page, to_page=None):



    pages_count = elements_count / elements_on_page
    if elements_count % elements_on_page > 0:
        pages_count = pages_count + 1

    pages = []

    if to_page:
        cur_page = to_page
    else:
        cur_page = from_page

    # количство страниц, которое отображается в ряд (без разделенного пэйджинга)
    pages_wo_separated_paging = 20

    if pages_count<pages_wo_separated_paging+1:
        for page in range(1,pages_count+1):
            if page==1:
                pages.append((page, 1))
            else:
                pages.append((page, page))
    else:
        # количество страниц при разделенном пэйджинге в начале и конце пэйджинга, которые выводятся обязательно
        pages_count_for_begin_end_paging = 3

        for p in range(1,pages_count_for_begin_end_paging+1):
           pages.append((p,p))
        # pages.append((1,1))
        # pages.append((2,2))
        # pages.append((3,3))

        # количество страниц, которые находятся в центре разделенного пэджинга
        center_pages_count = 5

        # количество страниц, при котором текущая страница будет находится в непрерывном ряду
        # 1	2	3	4	5	6	7	...	1241	1242	1243
        #                       ^
        pages_count_wo_separate_for_side = pages_count_for_begin_end_paging + center_pages_count+1

        if cur_page < pages_count_wo_separate_for_side:
            for p in range(pages_count_for_begin_end_paging+1,pages_count_wo_separate_for_side+1):
                pages.append((p,p))
            mid_rigth_page = (pages_count+1-pages_count_for_begin_end_paging-pages_count_wo_separate_for_side) / 2 #считаем сколько страниц внутри точек
            mid_rigth_page = pages_count_wo_separate_for_side + mid_rigth_page # это и есть средняя страница в правой части
            pages.append((u'...',mid_rigth_page))
        # if num_current_page < 7:
        #     pages.append((4,4))
        #     pages.append((5,5))
        #     pages.append((6,6))
        #     pages.append((7,7))
        #     mid_rigth_page = (pages_count -2 -7) / 2 #считаем сколько страниц внутри точек
        #     mid_rigth_page = 7 + mid_rigth_page # это и есть средняя страница в правой части
        #     pages.append((u'...',mid_rigth_page))

        elif  cur_page>pages_count+1-pages_count_wo_separate_for_side:
            mid_left_page = (pages_count+1-pages_count_for_begin_end_paging-pages_count_wo_separate_for_side) / 2 #считаем сколько страниц внутри точек
            mid_left_page = pages_count_for_begin_end_paging + mid_left_page # это и есть средняя страница в левой части
            pages.append((u'...',mid_left_page))
            for p in range(pages_count+1-pages_count_wo_separate_for_side,pages_count-pages_count_for_begin_end_paging+1):
                pages.append((p,p))
        # elif  num_current_page>pages_count-6:
        #     mid_left_page = (pages_count -2 -7) / 2 #считаем сколько страниц внутри точек
        #     mid_left_page = 3 + mid_left_page # это и есть средняя страница в левой части
        #     pages.append((u'...',mid_left_page))
        #     pages.append((pages_count-6,pages_count-6))
        #     pages.append((pages_count-5,pages_count-5))
        #     pages.append((pages_count-4,pages_count-4))
        #     pages.append((pages_count-3,pages_count-3))
        else:
            mid_page = cur_page

            mid_left_page = (mid_page-1 -pages_count_for_begin_end_paging)/2 + pages_count_for_begin_end_paging
            mid_rigth_page = (pages_count - (mid_page+pages_count_for_begin_end_paging))/2 + mid_page+1

            # количество страниц, которые добавляются слева и и справа от текущей центральной
            pages_count_for_add_to_left_and_right_from_current_central_page = center_pages_count / 2

            pages.append((u'...',mid_left_page))
            for p in range(mid_page-pages_count_for_add_to_left_and_right_from_current_central_page,mid_page+pages_count_for_add_to_left_and_right_from_current_central_page+1):
                pages.append((p,p))
            pages.append((u'...',mid_rigth_page))
            # mid_left_page = (mid_page-1 -3)/2 + 3
            # mid_rigth_page = (pages_count - (mid_page+1 +2))/2 + mid_page+1
            #
            # pages.append((u'...',mid_left_page))
            # pages.append((mid_page-1,mid_page-1))
            # pages.append((mid_page,mid_page))
            # pages.append((mid_page+1,mid_page+1))
            # pages.append((u'...',mid_rigth_page))


        for p in range(pages_count+1-pages_count_for_begin_end_paging,pages_count+1):
           pages.append((p,p))
        # pages.append((pages_count-2,pages_count-2))
        # pages.append((pages_count-1,pages_count-1))
        # pages.append((pages_count,pages_count))
    if not to_page:
        to_page = from_page

    return {
        'paging' : pages,
        'from_page' : from_page,
        'to_page' : to_page,
        'max_page' : pages_count,
    }
