# -*- coding: utf-8 -*-
import re
import wx
from typing import List
from sessions.blueski.templates import post_variables, person_variables, notification_variables
from wxUI.dialogs import templateDialogs


class EditTemplate(object):
    def __init__(self, template: str, type: str) -> None:
        super(EditTemplate, self).__init__()
        self.default_template = template
        if type == "post":
            self.variables = post_variables
        elif type == "notification":
            self.variables = notification_variables
        else:
            self.variables = person_variables
        self.template: str = template

    def validate_template(self, template: str) -> bool:
        used_variables: List[str] = re.findall(r"\$\w+", template)
        validated: bool = True
        for var in used_variables:
            if var[1:] not in self.variables:
                validated = False
        return validated

    def run_dialog(self) -> str:
        dialog = templateDialogs.EditTemplateDialog(
            template=self.template,
            variables=self.variables,
            default_template=self.default_template,
        )
        response = dialog.ShowModal()
        if response == wx.ID_SAVE:
            validated: bool = self.validate_template(dialog.template.GetValue())
            if validated == False:
                templateDialogs.invalid_template()
                self.template = dialog.template.GetValue()
                return self.run_dialog()
            else:
                return dialog.template.GetValue()
        else:
            return ""
