"""
pyOpenRPA open license
pyOpenRPA открытая лицензия

Copyright (c) 2019 Ivan Maslov
Правообладатель: 2019 Маслов Иван Дмитриевич

Текст лицензии см. в файле: LICENSE.PDF (в корне репозитория) или по адресу: https://pyopenrpa.ru/license/oferta.pdf

https://stackoverflow.com/questions/40574732/windows-data-storage-for-all-users

certificate.key

"""
import os
import sys
import time
gProgramDataPathStr = "C:\\ProgramData"
gProgramDataPORPathStr = os.path.join(gProgramDataPathStr, "pyOpenRPA")
gProgramDataCertificateFilePathStr = os.path.join(gProgramDataPORPathStr, "certificate.key")

# TODO Изменить права, чтобы другие пользователи могли править

if not os.path.exists(gProgramDataPORPathStr): os.mkdir(gProgramDataPORPathStr)

def CertificateExists() -> bool:
    """Check if the certificate key has been inserted

    :return: True - certificate key has been inserted; False - not has been inserted
    :rtype: bool
    """
    return os.path.exists(gProgramDataCertificateFilePathStr)

def CertificateKeySet(inCertificateKeyStr: str):
    """Get the certificate key string

    :param inCertificateKeyStr: Certificate key string (see license.pdf)
    :type inCertificateKeyStr: str
    """
    lFile = open(gProgramDataCertificateFilePathStr, "w", encoding="utf8")
    lFile.write(inCertificateKeyStr)
    lFile.close()

def CertificateKeyGet() -> str or None:
    """Get the certificate key from file

    :return: Certificate key (see license.pdf)
    :rtype: str or None (if key is not set)
    """
    
    lCertificateKeyStr=None
    if CertificateExists():
        lFile = open(gProgramDataCertificateFilePathStr, "r", encoding="utf8")
        lCertificateKeyStr = lFile.read()
        lFile.close()
    return lCertificateKeyStr

def ConsoleVerify() -> bool:
    """ Write info about certificate which has been detected on the machine

    :return: true - certificate exists
    :rtype: bool
    """
    lCertificateExistsBool = False
    if "PYOPENRPA_NODISP" not in os.environ:
        lCertificateExistsBool = True


        lCertificateKeyStr = CertificateKeyGet()
        if lCertificateKeyStr is None:
            lTextStr = """
Цифровой сертификат pyOpenRPA не обнаружен. 

Получить или проверить сертификат, а также ознакомиться с текстом лицензионного соглашения Вы можете по адресу: 
https://pyopenrpa.ru/verification
Операция формирования сертификата является автоматизированной и занимает несколько секунд.

pyOpenRPA не использует какие-либо инструменты физической блокировки функциональности своего ПО.
По всем вопросам Вы можете обратиться к правообладателю, контакты см. по адресу: 
https://pyopenrpa.ru/Index/pyOpenRPA_product_service.pdf
Используя ПО pyOpenRPA Вы осознаете свою ответственность в случаях нарушения лицензионного законодательства и совершения неправомерных действий.

ВНИМАНИЕ! НЕЗНАНИЕ ЗАКОНА НЕ ОСВОБОЖДАЕТ ОТ ОТВЕТСТВЕННОСТИ.
        """
            
            print(lTextStr)
            os.environ["PYOPENRPA_NODISP"]="1"
            lCertificateExistsBool = False
            time.sleep(5)
            ConsoleAccept()
        else:
            lTextStr = """
Обнаружен цифровой сертификат pyOpenRPA: {0}. 

Проверить сертификат, а также ознакомиться с текстом лицензионного соглашения Вы можете по адресу: 
https://pyopenrpa.ru/verification

pyOpenRPA не использует какие-либо инструменты физической блокировки функциональности своего ПО.
По всем вопросам Вы можете обратиться к правообладателю, контакты см. по адресу: 
https://pyopenrpa.ru/Index/pyOpenRPA_product_service.pdf
Используя ПО pyOpenRPA Вы осознаете свою ответственность в случаях нарушения лицензионного законодательства и совершения неправомерных действий.

ВНИМАНИЕ! НЕЗНАНИЕ ЗАКОНА НЕ ОСВОБОЖДАЕТ ОТ ОТВЕТСТВЕННОСТИ.
            """.format(lCertificateKeyStr)
            print(lTextStr)
            os.environ["PYOPENRPA_NODISP"]="1"
    return lCertificateExistsBool

def ConsoleAccept():
    """ Start pyOpenRPA activation master

    :return: _description_
    :rtype: str
    """
    if "PYOPENRPA_NODISP" not in os.environ:
        lText="""
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░    ░░░░░   ░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░    ░░░░░   ░░░░░░░░░░░░
░░░░░░░░░░░   ░░░░░    ░░░░░   ░░░░░░░░░░░░
░░░░░░░░░░░   ░░░░░    ░░░░░   ░░░░░░░░░░░░
░░░░░░░░░░░   ░░░░░    ░░░░░   ░░░░░░   ░░░
░░░░░░░░░░░   ░░░░░    ░░░░░   ░░░    ░░░░░
░░░░░░░░░░░   ░░░░░    ░░░░░       ░░░░░░░░
░░░   ░░░░░   ░░░░░    ░░░░░    ░░░░░░░░░░░
░░░░░    ░░   ░░░░░    ░░    ░░░░░░░░░░░░░░
░░░░░░░       ░░░░░        ░░░░░░░░░░░░░░░░
░░░░░░░░░░    ░░░░░    ░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░    ░░░    ░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░         ░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░      ░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░                        ░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
        """
        print(lText)
        time.sleep(2)
        lText="""
(RUS LANGUAGE) 
***********************************************
Добро пожаловать в систему активации pyOpenRPA!
***********************************************

pyOpenRPA - это открытое программное обеспечение класса RPA, которое разработано и зарегистрировано на территории Российской Федерации (Автор Иван Маслов, 2019г.). Все исходные коды доступны неограниченному кругу лиц для просмотра.
Данное ПО позволяет решить любые задачи, относящиеся к классу программной роботизации RPA.

Перед использованием просим убедиться в том, что Вы обладаете действующим цифровым сертификатом pyOpenRPA (далее сертификат).
Данный сертификат является свидетельством того, что Вы наделены правами в отношении pyOpenRPA в соответствии с законодательством Российской Федерации.

Получить или проверить сертификат, а также ознакомиться с текстом лицензионного соглашения Вы можете по адресу: 
https://pyopenrpa.ru/verification
Операция формирования сертификата является автоматизированной и занимает несколько секунд.

pyOpenRPA не использует какие-либо инструменты физической блокировки функциональности своего ПО.
По всем вопросам Вы можете обратиться к правообладателю, контакты см. по адресу: 
https://pyopenrpa.ru/Index/pyOpenRPA_product_service.pdf
Используя ПО pyOpenRPA Вы осознаете свою ответственность в случаях нарушения лицензионного законодательства и совершения неправомерных действий.

ВНИМАНИЕ! НЕЗНАНИЕ ЗАКОНА НЕ ОСВОБОЖДАЕТ ОТ ОТВЕТСТВЕННОСТИ.
        """
        #print(os.get_terminal_size())
        print(lText)
        os.environ["PYOPENRPA_NODISP"]="1"
        lCertificateKeyStr = input("Укажите код сертификата:")
        CertificateKeySet(inCertificateKeyStr=lCertificateKeyStr)