﻿  #!C:\Python\Python311\python.exe
# -*- coding: utf-8 -*-
# cl_man_grafana.py  03-10-202318:11
 
import sys
import re
import datetime
from collections import abc
import requests
import json

import platform

if platform.system() == "Windows":
    # print("Windows WindowsWindows Windows Windows ")
    s = "H:\\colect\\biblioteka\\programs\\LiClipse 10.0.0\\LiClipse Workspace\\Telegram_ESP32WebApp\\"
    # s2 = "H:\\colect\\biblioteka\\programs\\LiClipse 10.0.0\\LiClipse Workspace\\Telegram_ESP32WebApp\\man_db\\"
    pass
else:
    # print("Linux  Linux Linux Linux Linux Linux  ") 
    # sys.path.insert(0, '/opt/Telegram_ESP32/')  # todo
    s = '/opt/Telegram_ESP32/'
    pass           

sys.path.insert(0, s)
# sys.path.insert(0, s2)
sys.path.insert(0, '../..')
sys.path.insert(0, '..')
sys.path.insert(0, '*')

from utils.consts import clC
# from utils.consts.clC import encrypt_xor

from man_db.clManTEMP_DB import  clManTEMP_DB
from man_db.clManTZone_DB import  clManTZone_DB
from man_db.clManEmail_DB import  clManEmail_DB

from man_db.MDB import   clMLog
v_clManTEMP_DB = clManTEMP_DB()
v_clManTZone_DB = clManTZone_DB()
v_clManEmail_DB = clManEmail_DB()
v_clMLog = clMLog()
   


class cl_man_grafana(object):
    '''    
 
    '''
 
    dict_v = {}

    def __init__(self):
        pass

    @staticmethod
    def make_user_login(username):  # 16-09-202312:59
        right_username = False
        while right_username == False:
            res = cl_man_grafana.get_userByEmail(username)
            if res == 0:
                right_username = True
            else:
                username += "2"
        print("make_user_login username")
        print(str(username))
        return username       

    @staticmethod
    def make_password(username):  # 16-09-202312:59
        
        # text = "калининградкалининградкалининградкалининградкалининградкалининградкалининград"
        # crypt_key =clC. "mypass123"
        
        encrypted = clC.encrypt_xor(username, clC.crypt_key)
        print(encrypted)
        return encrypted
    
    @staticmethod
    def reg_user(username, useremail):  # 16-09-202312:59
        print("cl_man_grafana reg_user")
        try:
      
            username = cl_man_grafana.make_user_login(username)
            password = cl_man_grafana.make_password(username)
            server = clC.url_server_grafana 
            url = server + "/api/admin/users"
            print("url")
            print(url)
            headers = { 
               # "Authorization":"Bearer "+clC.PASS_ADMIN,
                "Content-Type":"application/json",
                "Accept": "application/json"
            }
            
            new_user = {
              "name": username,
              "email": useremail,
              "login": username,
              "password":password,
              "OrgId": 1
            }

            
            print("new_user")
            print(new_user)
            r = requests.post(url=url,
                               headers=headers,
                               data=json.dumps(new_user),
                                auth=(clC.USER_ADMIN, clC.PASS_ADMIN),
                                 verify=False)
            ar = r.json()#'id' 
            print(r.json())
            print('ar')
            print(ar)
            ar_keys = ar.keys()
            if "id" in ar_keys:
                if ar["id"] >0:
                    new_user["id"]=ar["id"]                 
                    return new_user
            else:
                return 0
        except Exception as inst:
            print("cl_man_grafana reg_user    Exception")
            print(type(inst))  # the exception type
            print(inst.args)  # arguments stored in .args
            print(inst)  # __str__ allows args to be printed directly,
            return 0

    @staticmethod
    def get_userByEmail(useremail):  # 16-09-202312:59
        try:

            server = clC.url_server_grafana 
            print("cl_man_grafana get_userByEmail    server")
            print(server)  # the exception type
            url = server + "/api/users/search?query=" + useremail
            # url = "http://localhost:3000/api/datasources"
            # url = server + "/api/dashboards/db"
            headers = {
                # "Authorization":"Bearer "+clC.g("API_KEY"),
                "Content-Type":"application/json",
                "Accept": "application/json"
            }
            # GET /api/users/1 HTTP/1.1
            # Accept: application/json
            # Content-Type: application/json
            # Authorization: Basic YWRtaW46YWRtaW4=
            
            r = requests.get(url=url,
                               headers=headers,
                               # data = json.dumps(new_user),
                                auth=(clC.USER_ADMIN, clC.PASS_ADMIN),
                                 verify=False)
            ar = r.json()
            # print(r.json())
            print(r)
            print("totalCount %d" % ar["totalCount"]) 
            return ar["totalCount"]
        except Exception as inst:
            print("cl_man_grafana get_userByEmail    Exception")
            print(type(inst))  # the exception type
            print(inst.args)  # arguments stored in .args
            print(inst)  # __str__ allows args to be printed directly,
            return clC.v_error
    
    

    @staticmethod
    def get_userById(Id):  # 16-09-202312:59
        try:
            server = clC.url_server_grafana 
            url = server + "/api/users/" + Id
            headers = {
                # "Authorization":"Bearer "+clC.g("API_KEY"),
                "Content-Type":"application/json",
                "Accept": "application/json"
            }
            
            r = requests.get(url=url,
                               headers=headers,
                               # data = json.dumps(new_user),
                                auth=(clC.USER_ADMIN, clC.PASS_ADMIN),
                                 verify=False)
    
            print(r.json())
            return r.json()
        except Exception as inst:
            print("cl_man_grafana get_userById    Exception")
            print(type(inst))  # the exception type
            print(inst.args)  # arguments stored in .args
            print(inst)  # __str__ allows args to be printed directly,
            return 0
 
