from db_config import connection_pool
import mysql.connector
from datetime import datetime
from flask import render_template, request, jsonify, session
import logging
import requests
import json

logger = logging.getLogger(__name__)

# Используем ту же сессию, что и в registration.py
from registration import http_session
from chat import get_subjects

def feedback():
    return render_template('feedback.html', subjects=get_subjects(), selected_subject_id=None)

def submit_feedback():
    # Получаем токен Turnstile из запроса
    turnstile_token = request.form.get('cf-turnstile-response')
    
    # Если токена нет, возвращаем ошибку
    if not turnstile_token:
        return jsonify({"error": "Проверка не пройдена. Пожалуйста, подтвердите, что вы не робот."}), 400
    
    # Проверяем токен через API Cloudflare
    secret_key = "0x4AAAAAABDzYN4_IrXo_0bQA_nKH8mlwVU"
    try:
        response = http_session.post('https://challenges.cloudflare.com/turnstile/v0/siteverify', data={
            'secret': secret_key,
            'response': turnstile_token,
            'remoteip': request.remote_addr
        }, timeout=5.0)
        
        result = response.json()
        
        # Если проверка не прошла, возвращаем ошибку
        if not result.get('success', False):
            logger.error(f"Turnstile validation failed: {result}")
            return jsonify({"error": "Проверка не пройдена. Пожалуйста, попробуйте еще раз."}), 400
    except (requests.exceptions.RequestException, requests.exceptions.Timeout, ConnectionError, json.JSONDecodeError) as e:
        # При ошибке соединения или таймауте, логируем ошибку, но пропускаем проверку
        logger.error(f"Ошибка при обращении к Cloudflare Turnstile: {e}")
        # Продолжаем обработку обратной связи

    user_id = session.get('user_id')
    user_email = None # Инициализируем email как None
    
    # Получаем текст обратной связи
    feedback_text = request.form.get('feedbackText')
    
    if not feedback_text:
        return jsonify({"error": "Текст обратной связи не может быть пустым"}), 400
    
    conn = None # Инициализируем conn
    cursor = None # Инициализируем cursor
    
    try:
        conn = connection_pool.get_connection()
        cursor = conn.cursor()
        
        if user_id: # Пользователь авторизован
            # Получаем email пользователя из базы
            cursor.execute("SELECT email FROM user WHERE id = %s", (user_id,))
            result = cursor.fetchone()
            if result:
                user_email = result[0]
            # Не закрываем курсор и соединение здесь, используем их дальше
        else: # Пользователь не авторизован
            user_email = request.form.get('email')
            if not user_email:
                return jsonify({"error": "Пожалуйста, укажите ваш email"}), 400
            # Простая проверка корректности email
            if '@' not in user_email or '.' not in user_email.split('@')[-1]:
                 return jsonify({"error": "Пожалуйста, укажите корректный email"}), 400
            # user_id остается None для неавторизованных
        
        # Сохраняем обратную связь в базу данных
        cursor.execute(
            "INSERT INTO feedback (user_id, email, message, created_at) VALUES (%s, %s, %s, %s)",
            (user_id, user_email, feedback_text, datetime.now())
        )
        
        conn.commit()
        return jsonify({"success": True}), 200
        
    except Exception as e:
        logger.error(f"Ошибка при сохранении обратной связи: {str(e)}")
        return jsonify({"error": "Произошла ошибка при отправке обратной связи"}), 500
    finally:
        # Гарантированно закрываем курсор и соединение, если они были открыты
        if cursor:
            cursor.close()
        if conn and conn.is_connected():
            conn.close()