# vim: fileencoding=utf-8
#
from .base_format import Format
from ..template_engine import ParametersContainer
from collections import OrderedDict
import json


class JSONFormat(Format):
    FORMAT: str = 'json'
    EXECUTABLE: bool = False

    comment_symbol: bool = False

    def __init__(self, document_text: str,
                 template_path: str,
                 ignore_comments: bool = False,
                 join_before: bool = False,
                 add_header: bool = False,
                 already_changed: bool = False,
                 parameters: ParametersContainer = ParametersContainer()):
        processing_methods: list = []
        super().__init__(processing_methods)
        self._ignore_comments: bool = ignore_comments
        self._join_before: bool = join_before
        self._comments_processing: bool = False

        # Пока что не добавляет заголовок, потому что не очень ясно, как это
        # делать.

        if document_text == '':
            self._document_dictionary: OrderedDict = OrderedDict()
        else:
            self._text_to_dictionary(document_text)

    def _text_to_dictionary(self, json_file_text: str) -> None:
        '''Метод для получения словаря документа, переопределяющий метод
        базового класса.'''
        self._document_dictionary = json.loads(json_file_text,
                                               object_pairs_hook=OrderedDict)

    @property
    def document_text(self):
        '''Метод для получения текста документа, переопределяющий метод
        базового класса.'''
        json_file_text = json.dumps(self._document_dictionary,
                                    ensure_ascii=False,
                                    indent=4).encode('utf8')
        return json_file_text.decode()
