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


class RawFormat(Format):
    '''Класс формата raw.'''
    FORMAT = 'raw'
    EXECUTABLE = False
    FORMAT_PARAMETERS = {'comment'}

    def __init__(self, document_text: str,
                 template_path,
                 ignore_comments=False,
                 join_before=False,
                 add_header=False,
                 already_changed=False,
                 parameters=ParametersContainer()):
        self.comment_symbol = parameters.comment or ""
        self._before = join_before

        self.header, self._document_text, self.shebang =\
            self._get_header_and_document_text(
                                           document_text,
                                           template_path,
                                           already_changed=already_changed,
                                           check_shebang=True)

    @property
    def document_text(self):
        return '{}{}{}\n'.format(self.shebang, self.header,
                                 self._document_text)

    def join_template(self, template):
        sep = ""
        if self._before:
            if (template._document_text
                and not template._document_text.endswith("\n")):
                sep = "\n"
            self._document_text = '{0}{1}{2}'.format(
                                                 template._document_text, sep,
                                                 self._document_text)
        else:
            if self._document_text and not self._document_text.endswith("\n"):
                sep = "\n"
            self._document_text = '{0}{1}{2}'.format(
                                                 self._document_text, sep,
                                                 template._document_text)
        if template.shebang:
            self.shebang = template.shebang

    def __bool__(self):
        return bool(self.document_text.strip())
