"""
OnlyLegs - Theme Manager
"""
import os
import sys
import shutil
from datetime import datetime
import sass


class CompileTheme():
    """
    Compiles the theme into the static folder
    """
    def __init__(self, theme_name, app_path):
        """
        Initialize the theme manager
        Compiles the theme into the static folder and loads the fonts
        """

        print(f"Loading '{theme_name}' theme...")

        theme_path = os.path.join(app_path, 'themes', theme_name)
        theme_dest = os.path.join(app_path, 'static', 'theme')

        if not os.path.exists(theme_path):
            print("Theme does not exist!")
            sys.exit(1)

        self.load_sass(theme_path, theme_dest)
        self.load_fonts(theme_path, theme_dest)

        now = datetime.now()
        print(f"{now.hour}:{now.minute}:{now.second} - Done!\n")

    def load_sass(self, source_path, css_dest):
        """
        Compile the sass (or scss) file into css and save it to the static folder
        """
        if os.path.join(source_path, 'style.sass'):
            sass_path = os.path.join(source_path, 'style.sass')
        elif os.path.join(source_path, 'style.scss'):
            sass_path = os.path.join(source_path, 'style.scss')
        else:
            print("No sass file found!")
            sys.exit(1)

        with open(os.path.join(css_dest, 'style.css'), 'w', encoding='utf-8') as file:
            try:
                file.write(sass.compile(filename=sass_path,output_style='compressed'))
            except sass.CompileError as err:
                print("Failed to compile!\n", err)
                sys.exit(1)

            print("Compiled successfully!")

    def load_fonts(self, source_path, font_dest):
        """
        Copy the fonts folder to the static folder
        """
        # Append fonts to the destination path
        source_path = os.path.join(source_path, 'fonts')
        font_dest = os.path.join(font_dest, 'fonts')

        if os.path.exists(font_dest):
            print("Updating fonts...")
            try:
                shutil.rmtree(font_dest)
            except Exception as err:
                print("Failed to remove old fonts!\n", err)
                sys.exit(1)

        try:
            shutil.copytree(source_path, font_dest)
            print("Copied new fonts!")
        except Exception as err:
            print("Failed to copy fonts!\n", err)
            sys.exit(1)
