from flask import Flask, redirect, request, render_template, session
import os
import secrets
import requests

app = Flask(__name__)
app.secret_key = os.getenv("FLASK_SECRET_KEY", "2024kE%d0401")

# VK API параметры
VK_CLIENT_ID = os.getenv("VK_CLIENT_ID")
VK_CLIENT_SECRET = os.getenv("VK_CLIENT_SECRET")
VK_REDIRECT_URI = os.getenv("VK_REDIRECT_URI", "https://apostol-bot.ru/callback")
VK_OAUTH_URL = "https://oauth.vk.com/authorize"
VK_TOKEN_URL = "https://oauth.vk.com/access_token"
VK_API_VERSION = "5.131"

# ---------------------------
# Главная страница
# ---------------------------
@app.route('/')
def index():
    return render_template("index.html")

# ---------------------------
# Редирект на VK OAuth
# ---------------------------
@app.route('/login')
def login():
    state = secrets.token_urlsafe(16)
    session['oauth_state'] = state

    params = {
        "client_id": VK_CLIENT_ID,
        "display": "page",
        "redirect_uri": VK_REDIRECT_URI,
        "scope": "offline,users,messages",
        "response_type": "code",
        "v": VK_API_VERSION,
        "state": state
    }

    url = requests.Request('GET', VK_OAUTH_URL, params=params).prepare().url
    return redirect(url)

# ---------------------------
# Callback от VK
# ---------------------------
@app.route('/callback')
def callback():
    code = request.args.get('code')
    state = request.args.get('state')

    if not code or state != session.get('oauth_state'):
        return "Ошибка авторизации", 400

    # Обмен кода на токен
    token_params = {
        "client_id": VK_CLIENT_ID,
        "client_secret": VK_CLIENT_SECRET,
        "redirect_uri": VK_REDIRECT_URI,
        "code": code
    }

    response = requests.get(VK_TOKEN_URL, params=token_params).json()
    access_token = response.get("access_token")
    user_id = response.get("user_id")

    if not access_token:
        return f"Ошибка при получении токена: {response}", 400

    # Пример запроса users.get
    user_info = requests.get(
        "https://api.vk.com/method/users.get",
        params={
            "user_ids": user_id,
            "fields": "first_name,last_name",
            "access_token": access_token,
            "v": VK_API_VERSION
        }
    ).json()

    # Пример отправки сообщения самому себе (messages.send)
    send_message = requests.get(
        "https://api.vk.com/method/messages.send",
        params={
            "user_id": user_id,
            "random_id": secrets.randbits(32),
            "message": "Привет! Авторизация через VK API прошла успешно ✅",
            "access_token": access_token,
            "v": VK_API_VERSION
        }
    ).json()

    return render_template("callback.html", user_info=user_info, access_token=access_token, send_message=send_message)
