import asyncio
import logging
import os

from flask import Flask, abort, request
from aiogram import Bot, Dispatcher
from aiogram.types import Update

from config import BOT_TOKEN, WEBHOOK_URL
from handlers.new_post import router
from storage import SQLiteStorage

logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(name)s - %(message)s")

WEBHOOK_PATH = "/tb_summer_tickets"

loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

_DB_PATH = os.path.join(os.path.dirname(__file__), "fsm.db")

flask_app = Flask(__name__)
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher(storage=SQLiteStorage(_DB_PATH))
dp.include_router(router)


@flask_app.route(WEBHOOK_PATH, methods=["POST"])
def telegram_webhook():
    data = request.get_json(force=True)
    if not data:
        abort(400)
    update = Update.model_validate(data)
    loop.run_until_complete(dp.feed_update(bot, update))
    return "OK", 200


@flask_app.route("/register_webhook")
def register_webhook():
    loop.run_until_complete(bot.set_webhook(f"{WEBHOOK_URL}{WEBHOOK_PATH}"))
    return "Webhook registered!", 200


if __name__ == "__main__":
    flask_app.run(host="0.0.0.0", port=8080)
