import os
from typing import Any

from jinja2 import Template, FileSystemLoader, Environment

from contrib.descriptions import VulnDescriptionProvider
from contrib.report_builders import JsonReportBuilder


class JinjaHtmlReportBuilder(JsonReportBuilder):
    def __init__(self, description_provider: VulnDescriptionProvider):
        super().__init__(description_provider)
        self.template_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'templates')
        self.template_name = 'jinja2_report.html'
        self._read_template()  # type: Template

    def build(self) -> Any:
        return self._template.render(data=self._buffer)

    def _read_template(self):
        template_loader = FileSystemLoader(searchpath=self.template_path)
        template_env = Environment(loader=template_loader, autoescape=True)
        self._template = template_env.get_template(self.template_name)