import mysql.connector
from db_config import connection_pool
from flask import (
    render_template, 
    session, 
    request, 
    redirect, 
    url_for, 
    jsonify

)
from chat import get_subjects

def select_textbook():
    if request.method == 'POST':
        if request.is_json:
            data = request.get_json()
            selected_textbook = data.get('textbook')
            subject_id = data.get('subject_id', 1)  # Получаем subject_id с дефолтным значением 1
        else:
            selected_textbook = request.form.get('textbook')
            subject_id = request.form.get('subject_id', 1)  # Получаем subject_id из формы
            
        if selected_textbook and 'user_id' in session:
            conn = connection_pool.get_connection()
            cursor = conn.cursor()
            try:
                # Изменяем запрос для сохранения subject_id
                cursor.execute("""
                    INSERT INTO selected_book (user_id, textbook_id, subject_id)
                    VALUES (%s, %s, %s)
                    ON DUPLICATE KEY UPDATE 
                    textbook_id = VALUES(textbook_id),
                    subject_id = VALUES(subject_id)
                """, (session['user_id'], selected_textbook, subject_id))
                
                conn.commit()
                session['selected_textbook'] = selected_textbook
                session['selected_subject'] = subject_id  # Сохраняем subject_id в сессии
                
            except mysql.connector.Error as err:
                print(f"Ошибка: {err}")
                conn.rollback()
                if request.is_json:
                    return jsonify({'error': 'Database error'}), 500
            finally:
                cursor.close()
                conn.close()
        
        if request.is_json:
            return jsonify({'success': True})
        return redirect(url_for('chat', textbook_id=selected_textbook))
    
    # Изменяем GET запрос для получения учебников по grade
    grade = request.args.get('grade')
    if grade:
        conn = connection_pool.get_connection()
        cursor = conn.cursor(dictionary=True)
        
        # Получаем subject_id из запроса или берем из сессии
        subject_id = request.args.get('subject_id') or session.get('selected_subject', 1)
        
        try:
            # Изменяем SQL запрос для поиска grade в JSON массиве и фильтрации по subject_id
            cursor.execute("""
                SELECT id, author, publisher, year, publication_number, name, 
                       grade, cover_url, disabled 
                FROM textbook 
                WHERE JSON_CONTAINS(grade, %s, '$') AND subject_id = %s
                ORDER BY disabled desc,name
            """, (f'[{grade}]', subject_id))  # Добавляем subject_id как второй параметр
            
            textbooks = cursor.fetchall()
            return jsonify(textbooks)
            
        except mysql.connector.Error as err:
            print(f"Ошибка при получении данных: {err}")
            return jsonify([])
        finally:
            cursor.close()
            conn.close()
    
    # Если grade не указан, возвращаем пустой шаблон
    return render_template('select_textbook.html', textbooks_by_grade={}, subjects=get_subjects())