# coding: utf-8
u'''
Основной грид реестра комплексных ДПП.

'''

from java.text import SimpleDateFormat
import json

from common.sysfunctions import toHexForXml, getGridHeight
from ru.curs.celesta.showcase.utils import XMLJSONConverter
from security.functions import userHasPermission
from umk._umk_orm import vw_complex_programCursor


try:
    from ru.curs.showcase.core.jython import JythonDTO
except:
    from ru.curs.celesta.showcase import JythonDTO


def gridData(context, main, add=None, filterinfo=None, session=None, elementId=None,
             sortColumnList=None, firstrecord=None, pagesize=None):

    complex_program = vw_complex_programCursor(context)
    if sortColumnList:
        sortName = toHexForXml(sortColumnList[0].id)
        sortType = unicode(sortColumnList[0].sorting).lower()
    else:
        sortName = None

    # Заголовки
    _header = {
        'uid': ['~~id'],
        'name': [u'Наименование'],
        'speciality_name': [u'Специальность'],
        'dev_year': [u'Год разработки'],
        'approved_date': [u'Дата утверждения'],
        'hours': [u'Кол-во часов'],
        'status_name': [u'Статус'],

        'properties': [u'properties']
    }
    complex_program.orderBy('speciality_name', 'name')

    for column in _header:
        _header[column].append(toHexForXml(_header[column][0]))
        if sortName == _header[column][1]:
            complex_program.orderBy("%s %s" % (column, sortType))

    complex_program.limit(firstrecord - 1, pagesize)

    grid_data = {
        'records': {
            'rec': []
        }
    }
    df = SimpleDateFormat("dd.MM.yyyy")
    for complex_program in complex_program.iterate():
        row = {}
        row[_header['uid'][1]] = complex_program.uid
        row[_header['name'][1]] = complex_program.name
        if complex_program.education_level_name:
            row[_header['speciality_name'][1]] = u'%s (%s)' % (complex_program.speciality_name,
                                                               complex_program.education_level_name)
        else:
            row[_header['speciality_name'][1]] = complex_program.speciality_name
        if complex_program.dev_year:
            row[_header['dev_year'][1]] = "%d" % complex_program.dev_year
        if complex_program.approved_date:
            row[_header['approved_date'][1]] = df.format(complex_program.approved_date)
        row[_header['hours'][1]] = complex_program.hours
        row[_header['status_name'][1]] = complex_program.status_name

        row[_header['properties'][1]] = {
            'event': {
                '@name': 'row_single_click',
                'action': {
                    '#sorted': [
                        {
                            'main_context': 'current'
                        },
                        {
                            'datapanel': {
                                '@type': 'current',
                                '@tab': 'current',
                                'element': [
                                    {
                                        '@id': 'umkVersionGrid',
                                        'add_context': ''
                                    },
                                    {
                                        '@id': 'complexProgramAttributeGrid',
                                        'add_context': ''
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        }
        grid_data['records']['rec'].append(row)

    return JythonDTO(XMLJSONConverter.jsonToXml(json.dumps(grid_data)),
                     None)


def gridMeta(context, main=None, add=None, filterinfo=None, session=None, elementId=None,
             sortColumnList=None):

    complex_program = vw_complex_programCursor(context)

    # Заголовки
    _header = {
        'uid': ['~~id'],
        'name': [u'Наименование'],
        'speciality_name': [u'Специальность'],
        'dev_year': [u'Год разработки'],
        'approved_date': [u'Дата утверждения'],
        'hours': [u'Кол-во часов'],
        'status_name': [u'Статус'],
        'properties': [u'properties']
    }

    grid_settings = {}
    grid_settings['gridsettings'] = {
        'labels': {
            'header': 'Комплексные ДПП'
        },
        'columns': {
            'col': []
        },
        'properties': {
            '@pagesize': 50,
            '@gridWidth': '100%',
            '@gridHeight': getGridHeight(session, numberOfGrids=2, gridHeaderHeight=55, delta=59),
            '@totalCount': complex_program.count(),
            '@profile': 'default.properties'
        },
    }
    # Добавляем поля для отображения в gridsettingss
    grid_settings['gridsettings']['columns']['col'].append({'@id': _header['name'][0], '@width': '300px'})
    grid_settings['gridsettings']['columns']['col'].append({'@id': _header['speciality_name'][0], '@width': '120px'})
    grid_settings['gridsettings']['columns']['col'].append({'@id': _header['hours'][0], '@width': '50px'})
    grid_settings['gridsettings']['columns']['col'].append({'@id': _header['dev_year'][0], '@width': '70px'})
    grid_settings['gridsettings']['columns']['col'].append({'@id': _header['status_name'][0], '@width': '100px'})
    grid_settings['gridsettings']['columns']['col'].append({'@id': _header['approved_date'][0], '@width': '70px'})

    return JythonDTO(None,
                     XMLJSONConverter.jsonToXml(json.dumps(grid_settings)))


def gridToolBar(context, main=None, add=None, filterinfo=None, session=None, elementId=None):

    session_json = json.loads(session)['sessioncontext']
    grid_context = session_json['related']['gridContext']

    # добавление КДПП
    if userHasPermission(context, session_json['sid'], 'addComplexProgram'):
        add_style = "false"
    else:
        add_style = "true"
    # редактирование КДПП
    if userHasPermission(context, session_json['sid'], 'editComplexProgram'):
        edit_style = ("false" if 'currentRecordId' in grid_context
                      else "true")
    else:
        edit_style = "true"
    # удаление КДПП
    if userHasPermission(context, session_json['sid'], 'delComplexProgram'):
        delete_style = edit_style
    else:
        delete_style = "true"

    grid_toolbar = {
        'gridtoolbar': {
            '#sorted': [
                {
                    'item': {
                        '@text': u'Добавить',
                        '@hint': u'Добавить КДПП',
                        '@disable': add_style,
                        'action': {
                            '@show_in': 'MODAL_WINDOW',
                            '#sorted': [
                                {
                                    'main_context': 'current'
                                },
                                {
                                    'modalwindow': {
                                        '@caption': u'Добавить запись о КДПП',
                                        '@height': '500',
                                        '@width': '800'
                                    }
                                },
                                {
                                    'datapanel': {
                                        '@type': 'current',
                                        '@tab': 'current',
                                        'element': {
                                            '@id': 'complexProgramCard',
                                            'add_context': 'add'
                                        }
                                    }
                                }
                            ]
                        }
                    }
                },
                {
                    'item': {
                        '@text': u'Редактировать',
                        '@hint': u'Редактировать КДПП',
                        '@disable': edit_style,
                        'action': {
                            '@show_in': 'MODAL_WINDOW',
                            '#sorted': [
                                {
                                    'main_context': 'current'
                                },
                                {
                                    'modalwindow': {
                                        '@caption': u'Редактировать запись о КДПП',
                                        '@height': '500',
                                        '@width': '800'
                                    }
                                },
                                {
                                    'datapanel': {
                                        '@type': 'current',
                                        '@tab': 'current',
                                        'element': {
                                            '@id': 'complexProgramCard',
                                            'add_context': 'edit'
                                        }
                                    }
                                }
                            ]
                        }
                    }
                },
                {
                    'item': {
                        '@text': u'Удалить',
                        '@hint': u'Удалить КДПП',
                        '@disable': delete_style,
                        'action': {
                            '@show_in': 'MODAL_WINDOW',
                            '#sorted': [
                                {
                                    'main_context': 'current'
                                },
                                {
                                    'modalwindow': {
                                        '@caption': 'Удалить данные о КДПП',
                                        '@height': '140',
                                        '@width': '400'
                                    }
                                },
                                {
                                    'datapanel': {
                                        '@type': 'current',
                                        '@tab': 'current',
                                        'element': {
                                            '@id': 'complexProgramDeleteCard',
                                            'add_context': ''
                                        }
                                    }
                                }
                            ]
                        }
                    }
                }
            ]
        }
    }

    if not userHasPermission(context, session_json['sid'], 'addComplexProgram') or \
            userHasPermission(context, session_json['sid'], 'editComplexProgram') or \
            userHasPermission(context, session_json['sid'], 'deleteComplexProgram'):
        grid_toolbar = {
            'gridtoolbar': {
                "item": ""
            }
        }

    return XMLJSONConverter.jsonToXml(json.dumps(grid_toolbar))