"""add max_attempts to quiz

Revision ID: 3166bb1d7af5
Revises: b2c3d4e5f6g8
Create Date: 2026-03-17 19:53:12.442311

"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import mysql

# revision identifiers, used by Alembic.
revision = '3166bb1d7af5'
down_revision = 'b2c3d4e5f6g8'
branch_labels = None
depends_on = None


def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    with op.batch_alter_table('grade_categories', schema=None) as batch_op:
        batch_op.alter_column('created_at',
               existing_type=mysql.DATETIME(),
               nullable=False)
        batch_op.drop_constraint(batch_op.f('grade_categories_ibfk_1'), type_='foreignkey')
        batch_op.create_foreign_key(None, 'courses', ['course_id'], ['id'])

    with op.batch_alter_table('grade_entries', schema=None) as batch_op:
        batch_op.alter_column('created_at',
               existing_type=mysql.DATETIME(),
               nullable=False)
        batch_op.alter_column('updated_at',
               existing_type=mysql.DATETIME(),
               nullable=False)
        batch_op.drop_constraint(batch_op.f('grade_entries_ibfk_2'), type_='foreignkey')
        batch_op.drop_constraint(batch_op.f('grade_entries_ibfk_3'), type_='foreignkey')
        batch_op.drop_constraint(batch_op.f('grade_entries_ibfk_1'), type_='foreignkey')
        batch_op.create_foreign_key(None, 'users', ['student_id'], ['id'])
        batch_op.create_foreign_key(None, 'users', ['graded_by'], ['id'])
        batch_op.create_foreign_key(None, 'grade_items', ['grade_item_id'], ['id'])

    with op.batch_alter_table('grade_items', schema=None) as batch_op:
        batch_op.alter_column('created_at',
               existing_type=mysql.DATETIME(),
               nullable=False)
        batch_op.alter_column('updated_at',
               existing_type=mysql.DATETIME(),
               nullable=False)
        batch_op.drop_constraint(batch_op.f('grade_items_ibfk_1'), type_='foreignkey')
        batch_op.drop_constraint(batch_op.f('grade_items_ibfk_5'), type_='foreignkey')
        batch_op.drop_constraint(batch_op.f('grade_items_ibfk_4'), type_='foreignkey')
        batch_op.drop_constraint(batch_op.f('grade_items_ibfk_3'), type_='foreignkey')
        batch_op.drop_constraint(batch_op.f('grade_items_ibfk_2'), type_='foreignkey')
        batch_op.create_foreign_key(None, 'learning_objectives', ['learning_objective_id'], ['id'])
        batch_op.create_foreign_key(None, 'quizzes', ['quiz_id'], ['id'])
        batch_op.create_foreign_key(None, 'courses', ['course_id'], ['id'])
        batch_op.create_foreign_key(None, 'learning_goals', ['learning_goal_id'], ['id'])
        batch_op.create_foreign_key(None, 'grade_categories', ['category_id'], ['id'])

    with op.batch_alter_table('issues', schema=None) as batch_op:
        batch_op.create_index(batch_op.f('ix_issues_school_id'), ['school_id'], unique=False)

    with op.batch_alter_table('kbm_notes', schema=None) as batch_op:
        batch_op.alter_column('created_at',
               existing_type=mysql.DATETIME(),
               nullable=False)
        batch_op.alter_column('updated_at',
               existing_type=mysql.DATETIME(),
               nullable=False)
        batch_op.drop_constraint(batch_op.f('kbm_notes_ibfk_2'), type_='foreignkey')
        batch_op.drop_constraint(batch_op.f('kbm_notes_ibfk_1'), type_='foreignkey')
        batch_op.create_foreign_key(None, 'courses', ['course_id'], ['id'])
        batch_op.create_foreign_key(None, 'users', ['teacher_id'], ['id'])

    with op.batch_alter_table('learning_goals', schema=None) as batch_op:
        batch_op.alter_column('created_at',
               existing_type=mysql.DATETIME(),
               nullable=False)
        batch_op.drop_constraint(batch_op.f('learning_goals_ibfk_1'), type_='foreignkey')
        batch_op.create_foreign_key(None, 'learning_objectives', ['learning_objective_id'], ['id'])

    with op.batch_alter_table('learning_objectives', schema=None) as batch_op:
        batch_op.alter_column('created_at',
               existing_type=mysql.DATETIME(),
               nullable=False)
        batch_op.drop_constraint(batch_op.f('learning_objectives_ibfk_1'), type_='foreignkey')
        batch_op.create_foreign_key(None, 'courses', ['course_id'], ['id'])

    with op.batch_alter_table('quizzes', schema=None) as batch_op:
        batch_op.add_column(sa.Column('max_attempts', sa.Integer(), nullable=False))

    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    with op.batch_alter_table('quizzes', schema=None) as batch_op:
        batch_op.drop_column('max_attempts')

    with op.batch_alter_table('learning_objectives', schema=None) as batch_op:
        batch_op.drop_constraint(None, type_='foreignkey')
        batch_op.create_foreign_key(batch_op.f('learning_objectives_ibfk_1'), 'courses', ['course_id'], ['id'], ondelete='CASCADE')
        batch_op.alter_column('created_at',
               existing_type=mysql.DATETIME(),
               nullable=True)

    with op.batch_alter_table('learning_goals', schema=None) as batch_op:
        batch_op.drop_constraint(None, type_='foreignkey')
        batch_op.create_foreign_key(batch_op.f('learning_goals_ibfk_1'), 'learning_objectives', ['learning_objective_id'], ['id'], ondelete='CASCADE')
        batch_op.alter_column('created_at',
               existing_type=mysql.DATETIME(),
               nullable=True)

    with op.batch_alter_table('kbm_notes', schema=None) as batch_op:
        batch_op.drop_constraint(None, type_='foreignkey')
        batch_op.drop_constraint(None, type_='foreignkey')
        batch_op.create_foreign_key(batch_op.f('kbm_notes_ibfk_1'), 'courses', ['course_id'], ['id'], ondelete='CASCADE')
        batch_op.create_foreign_key(batch_op.f('kbm_notes_ibfk_2'), 'users', ['teacher_id'], ['id'], ondelete='CASCADE')
        batch_op.alter_column('updated_at',
               existing_type=mysql.DATETIME(),
               nullable=True)
        batch_op.alter_column('created_at',
               existing_type=mysql.DATETIME(),
               nullable=True)

    with op.batch_alter_table('issues', schema=None) as batch_op:
        batch_op.drop_index(batch_op.f('ix_issues_school_id'))

    with op.batch_alter_table('grade_items', schema=None) as batch_op:
        batch_op.drop_constraint(None, type_='foreignkey')
        batch_op.drop_constraint(None, type_='foreignkey')
        batch_op.drop_constraint(None, type_='foreignkey')
        batch_op.drop_constraint(None, type_='foreignkey')
        batch_op.drop_constraint(None, type_='foreignkey')
        batch_op.create_foreign_key(batch_op.f('grade_items_ibfk_2'), 'learning_objectives', ['learning_objective_id'], ['id'], ondelete='SET NULL')
        batch_op.create_foreign_key(batch_op.f('grade_items_ibfk_3'), 'learning_goals', ['learning_goal_id'], ['id'], ondelete='SET NULL')
        batch_op.create_foreign_key(batch_op.f('grade_items_ibfk_4'), 'courses', ['course_id'], ['id'], ondelete='CASCADE')
        batch_op.create_foreign_key(batch_op.f('grade_items_ibfk_5'), 'quizzes', ['quiz_id'], ['id'], ondelete='SET NULL')
        batch_op.create_foreign_key(batch_op.f('grade_items_ibfk_1'), 'grade_categories', ['category_id'], ['id'], ondelete='CASCADE')
        batch_op.alter_column('updated_at',
               existing_type=mysql.DATETIME(),
               nullable=True)
        batch_op.alter_column('created_at',
               existing_type=mysql.DATETIME(),
               nullable=True)

    with op.batch_alter_table('grade_entries', schema=None) as batch_op:
        batch_op.drop_constraint(None, type_='foreignkey')
        batch_op.drop_constraint(None, type_='foreignkey')
        batch_op.drop_constraint(None, type_='foreignkey')
        batch_op.create_foreign_key(batch_op.f('grade_entries_ibfk_1'), 'grade_items', ['grade_item_id'], ['id'], ondelete='CASCADE')
        batch_op.create_foreign_key(batch_op.f('grade_entries_ibfk_3'), 'users', ['graded_by'], ['id'], ondelete='SET NULL')
        batch_op.create_foreign_key(batch_op.f('grade_entries_ibfk_2'), 'users', ['student_id'], ['id'], ondelete='CASCADE')
        batch_op.alter_column('updated_at',
               existing_type=mysql.DATETIME(),
               nullable=True)
        batch_op.alter_column('created_at',
               existing_type=mysql.DATETIME(),
               nullable=True)

    with op.batch_alter_table('grade_categories', schema=None) as batch_op:
        batch_op.drop_constraint(None, type_='foreignkey')
        batch_op.create_foreign_key(batch_op.f('grade_categories_ibfk_1'), 'courses', ['course_id'], ['id'], ondelete='CASCADE')
        batch_op.alter_column('created_at',
               existing_type=mysql.DATETIME(),
               nullable=True)

    # ### end Alembic commands ###
