import requests
import xmpp
from xmpp import cli
import config
from BotClass import JabberBot
import json
#раскомментировать, когда перейдем на разные пароли
import hashlib
from datetime import datetime

import time
import threading

#test
import jsonAndRequest as jsreq

global tasklist

botname="st_request_wontfix"

JID=botname+"@"+config.JSERVER
PORT=config.PORT

PASSWORD=hashlib.md5((botname+config.PASSWORD).encode('utf-8')).hexdigest()


#таким образом хранится список jid, от которых можно получать сообщения этому боту
listen_to=["st_request_wontfix@ej.sharix-app.org"]

#тут хранится список jid, кому бот может отправлять сообщения в результате обработки заявки
proceed_to=["numbers"]

#максимальное значение попыток обработать заказ
idle_value=10

# обработчик входящих сообщений
# def message_handler(conn, mess):
#     text = mess.getBody()#текст сообщения боту
#     user = mess.getFrom()#отправитель сообщения
#     if (str(user).split("/")[0]) in listen_to:
#         # print (str(user).split("/")[0])
#         if text is not None:
#             orderObj = jsreq.jsonToOrder(text)
#             tasklist.append(orderObj)
#             bot.bot_log(str(datetime.now())+" Поступивший заказ успешно добавлен в очередь обработки\n")

def status_changer_wait(period,localtask):
    bot.bot_log(botname+" "+str(datetime.now())+" "+"Тикет ожидает\n")
    time.sleep(period)

    bot.proceed_status(proceed_to[0],localtask)
    bot.bot_log(botname+" "+str(datetime.now())+" "+"Тикет подождал и возвращен в очередь\n")

def status_changer_process(ticket):
    bot.bot_log(botname+" "+str(datetime.now())+" "+"Тикет в обработчике\n")
    tickets_new=jsreq.requestGetTicket_user(token, config.API_URL+f"tickets/api/ticket_list/{ticket.id}")
    # if ticket.id == 2103:
    #     for ticket_new in tickets_new:
    #         metaservice_admin(ticket_new,ticket.group)
    if ticket.id == 2101:
        for ticket_new in tickets_new:
            company_status(ticket_new)
    elif ticket.id == 2102:
        for ticket_new in tickets_new:
            company_status(ticket_new,ticket.group)
    elif ticket.id =='':
        print('should be soon')#дополнить по всем айди тикетов
    # if ticket_new != []:
    #     print(ticket_new)
    #api/v1/platform/sharix-users/1/
    
    # bot.proceed_status(proceed_to[1], localtask)
    # bot.bot_log(botname + " " + str(datetime.now()) + " " + "Тикет успешно обработан и отправлен на pending\n")


def company_status(ticket_new):
    if ticket_new.status == 141:#нужны доп проверки
        answer=jsreq.change_status_company(token, config.API_URL+f"dbsynce/api/client/{ticket_new.created_by}/")
        if answer!=200:
            print(f'Ошибка{answer}')
    else:   
        print('Статус не ACCESS')

# def company_status(ticket_new):
#     if ticket_new.status == 141:#нужны доп проверки
#         answer=jsreq.change_status_company(token, config.API_URL+f"dbsynce/api/client/{ticket_new.created_by}/",ticket_new.created_by)
#         if answer!=200:
#             print(f'Ошибка{answer}')
#     else:   
#         print('Статус не ACCESS')


def metaservice_admin(ticket_new,group):
    if ticket_new.status == 141:#нужны доп проверки
        answer=jsreq.change_groups(token, config.API_URL+f"api/v1/platform/sharix-users/{ticket_new.created_by}/",group)
        if answer!=200:
            print(f'Ошибка{answer}')
    else:   
        print('Статус не ACCESS')


def status_changer():
    while True:
        ticketlist=jsreq.requestGetList(token, config.API_URL+"tickets/api/ticket_list/")
        for ticket in ticketlist:
            bot.bot_log(botname + " " + datetime.now().strftime('%Y-%m-%d') + " "+ "Тикет в очереди на обработке\n")
            t1 = threading.Thread(target=status_changer_process, args=(ticket,))
            t1.start()
            t1.join()  # Ожидаем завершения обработки тикета
        time.sleep(300)  # Обновляем ticketlist каждые 5 минут


#Авторизация и запуск бота

#пустой список
ticketlist = []

token = jsreq.requestGetToken(config.API_URL+"api/v1/auth/token/login/")
# ticketlist=jsreq.requestGetList(token, config.API_URL+"/dbsynce/api/orders/") ###Должна быть проверка между двумя

# # print (len(tasklist))

bot = JabberBot(JID, PASSWORD, PORT)



bot.start(status_changer)