from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text
from .k2obj import k2obj
import yaml
import os
import requests
import pytz
import os
import sys
from flask import session, request
from flask_login import LoginManager


class k2(k2obj):
    version = '2.5.1.27'
    db = SQLAlchemy()
    domain = 'http://127.0.0.1:5000/'
    update_domain = 'http://127.0.0.1:8000/' #'http://185.174.172.137/'
    venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/Scripts') #for windows
    #venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/bin')    #for linux
    json_sort_keys = False
    timezone = pytz.timezone('Europe/Kiev')
    secret_key = 'JH&INH987gFDHdsagh&8dwbjdw8ckw'
    default_language = 'en'
    current_language = ''
    babel_translation_directories = ''
    languages = {
        'en': 'English',
        'uk': 'Українська',
        'pl': 'Polski'
    }
    components =  ''
    login_manager = LoginManager()




    def __init__(self):
        super().__init__()

    @classmethod
    def load_babel_translation_directories(cls):
        with open('languages/babel_translation_directories.yml', 'r') as f:
            data = yaml.safe_load(f)
            #print(data['babel_translation_directories'])
        cls.babel_translation_directories = data['babel_translation_directories']

    @classmethod
    def get_locale(cls):
        if 'lang' in session:
            # Отримати обрану мову з сеансу користувача
            return session['lang']
        else:
            # Повернути мову за замовчуванням з налаштувань додатку
            return cls.default_language #app.config['DEFAULT_LANGUAGE']

    @classmethod
    def search_babel_translation_directories(cls):
        response = requests.get(f'{cls.domain}api/languages')
        if response.status_code == 200:
            cls.babel_translation_directories = response.text
            data = {'babel_translation_directories': response.text}
        else:
            cls.babel_translation_directories = 'languages'
            data = {'babel_translation_directories': 'languages'}

        with open('languages/babel_translation_directories.yml', 'w') as f:
            yaml.dump(data, f)



    # load database settings from yml file
    def init_db_uri(self):
        with open('db/db.yml', 'r') as f:
            db_config = yaml.load(f, Loader=yaml.FullLoader)
        return db_config

    # creating a connection
    def init_db(self, app):
        db_config = self.init_db_uri()
        db_uri = f"mysql+{db_config['driver']}://{db_config['user']}:{db_config['password']}@{db_config['host']}/{db_config['dbname']}"
        app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
        db_path = '../db/database.db'
        app.config['SQLALCHEMY_BINDS'] = {'db2': f'sqlite:///{db_path}'}
        self.db.init_app(app)

    def init_lm(self, app):
        # Initialize LoginManager
        self.login_manager.init_app(app)


