import hashlib
import threading
import time
from datetime import datetime

import config
import jsonAndRequest as jsreq

global ticketlist

botname = "st_request_wontfix"
JID = botname + "@" + config.JSERVER
PORT = config.PORT
PASSWORD = hashlib.md5((botname + config.PASSWORD).encode('utf-8')).hexdigest()

listen_to = ["st_request_wontfix@ej.sharix-app.org"]
proceed_to = ["numbers"]

# Новые параметры
INFINITE_TIMEOUT = -1  # Бесконечный таймаут
DEFAULT_REMINDER_INTERVAL = 30 * 60  # 30 минут в секундах
MAX_REMINDERS = 3  # Максимальное количество напоминаний


def send_reminder(user, ticket):
    message = f"Напоминание: необходимо принять решение по тикету {ticket.id}"
    # Здесь должен быть код для отправки сообщения пользователю
    print(f"Отправлено напоминание пользователю {user} о тикете {ticket.id}")


def send_wontfix_notification(user, ticket):
    message = f"Уведомление: тикет {ticket.id} был отмечен как WONTFIX из-за отсутствия действий"
    # Здесь должен быть код для отправки сообщения пользователю
    print(f"Отправлено уведомление пользователю {user} о WONTFIX для тикета {ticket.id}")


def process_in_progress_ticket(ticket, timeout, reminder_interval):
    start_time = datetime.now()
    reminders_sent = 0

    while True:
        current_time = datetime.now()
        time_in_progress = (current_time - start_time).total_seconds()

        if timeout != INFINITE_TIMEOUT and time_in_progress > timeout:
            # Превышен таймаут, меняем статус на WONTFIX
            jsreq.requestPatchTicketUser(token, config.API_URL + f"tickets/api/ticket/{ticket.id}/",
                                         {"status": "WONTFIX"})
            send_wontfix_notification(ticket.assigned_to, ticket)
            break

        if time_in_progress >= (reminders_sent + 1) * reminder_interval:
            send_reminder(ticket.assigned_to, ticket)
            reminders_sent += 1

            if reminders_sent >= MAX_REMINDERS:
                # Превышено максимальное количество напоминаний
                jsreq.requestPatchTicketUser(token, config.API_URL + f"tickets/api/ticket/{ticket.id}/",
                                             {"status": "WONTFIX"})
                send_wontfix_notification(ticket.assigned_to, ticket)
                break

        # Проверяем, не изменился ли статус тикета
        updated_ticket_list = jsreq.requestGetTicket(token, config.API_URL + f"tickets/api/ticket/{ticket.id}/")
        if updated_ticket_list and updated_ticket_list[0].status != "IN PROCESS":
            break

        time.sleep(60)  # Проверяем каждую минуту


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


# Инициализация и запуск бота
token = jsreq.requestGetToken(config.API_URL + "api/v1/auth/token/login/")
bot = JabberBot(JID, PASSWORD, PORT)
bot.start(status_changer)
