from django.views.generic import View
from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator
from django.http import HttpResponse 
from django.conf import settings

from users.models import Client
from payment.models import Order


import logging
import telebot
import time

WEBHOOK_HOST = 'payment.arongulnaziya.com'
WEBHOOK_PORT = 443
WEBHOOK_LISTEN = '0.0.0.0'

WEBHOOK_URL_BASE = f'https://{WEBHOOK_HOST}:{WEBHOOK_PORT}'
WEBHOOK_URL_PATH = '/bot/'

logger = telebot.logger
telebot.logger.setLevel(logging.INFO)

bot = telebot.TeleBot(settings.BOT_TOKEN)


@method_decorator(csrf_exempt, name='dispatch')
class BotView(View):
    def get(self, request):
        return HttpResponse('get')

    def post(self, request):
        if request.headers.get('Content-Type') == 'application/json':
            json_string = request.body.decode('utf-8')
            update = telebot.types.Update.de_json(json_string)
            bot.process_new_updates([update])
        return HttpResponse('post')


@bot.message_handler(commands=['help', 'start'])
def send_welcome(message):
    try:
        token = telebot.util.extract_arguments(message.text)
        order = Order.objects.get(token=token)
        if order.is_active_token:
            order.is_active_token = False
            order.save()

            group_link = order.service.group_link

            bot.send_message(message.chat.id, f'Токен успешно активирован и не может больше использоваться.\n Ваша ссылка на группу: {group_link}')
        else:
            bot.send_message(message.chat.id, 'Данный токен уже использован или не существует.')
    except Exception as e:
        bot.send_message(message.chat.id, 'Данный токен уже использован или не существует.')

@bot.message_handler(content_types=['text'])
def chat_messages(message):
    try:
        
        order = Order.objects.get(token=message.text)
        if order.is_active_token:
            order.is_active_token = False
            order.save()
            
            group_link = order.service.group_link

            bot.send_message(message.chat.id, f'Токен успешно активирован и не может больше использоваться.\n Ваша ссылка на группу: {group_link}')
        else:
            bot.send_message(message.chat.id, 'Данный токен уже использован или не существует.')
    except Exception as e:
        bot.send_message(message.chat.id, 'Данный токен уже использован или не существует.')



bot.remove_webhook()
time.sleep(0.1)
bot.set_webhook(url=f'{WEBHOOK_URL_BASE}{WEBHOOK_URL_PATH}')