"""add_assignment_models

Revision ID: 2c13b90e5d9c
Revises: 3166bb1d7af5
Create Date: 2026-03-18 18:36:29.818442

"""
from alembic import op
import sqlalchemy as sa


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


def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.create_table('assignments',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('title', sa.String(length=200), nullable=False),
    sa.Column('description', sa.Text(), nullable=True),
    sa.Column('course_id', sa.Integer(), nullable=False),
    sa.Column('due_date', sa.DateTime(), nullable=True),
    sa.Column('max_score', sa.Float(), nullable=False),
    sa.Column('status', sa.Enum('PUBLISHED', 'DRAFT', 'ARCHIVED', name='assignmentstatus'), nullable=False),
    sa.Column('created_at', sa.DateTime(), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=False),
    sa.ForeignKeyConstraint(['course_id'], ['courses.id'], ),
    sa.PrimaryKeyConstraint('id')
    )
    with op.batch_alter_table('assignments', schema=None) as batch_op:
        batch_op.create_index(batch_op.f('ix_assignments_course_id'), ['course_id'], unique=False)

    op.create_table('assignment_submissions',
    sa.Column('id', sa.Integer(), nullable=False),
    sa.Column('assignment_id', sa.Integer(), nullable=False),
    sa.Column('student_id', sa.Integer(), nullable=False),
    sa.Column('content', sa.Text(), nullable=True),
    sa.Column('file_path', sa.String(length=500), nullable=True),
    sa.Column('status', sa.Enum('SUBMITTED', 'GRADED', name='assignmentsubmissionstatus'), nullable=False),
    sa.Column('submitted_at', sa.DateTime(), nullable=False),
    sa.Column('updated_at', sa.DateTime(), nullable=False),
    sa.ForeignKeyConstraint(['assignment_id'], ['assignments.id'], ),
    sa.ForeignKeyConstraint(['student_id'], ['users.id'], ),
    sa.PrimaryKeyConstraint('id'),
    sa.UniqueConstraint('assignment_id', 'student_id', name='uq_assignment_student')
    )
    with op.batch_alter_table('assignment_submissions', schema=None) as batch_op:
        batch_op.create_index(batch_op.f('ix_assignment_submissions_assignment_id'), ['assignment_id'], unique=False)
        batch_op.create_index(batch_op.f('ix_assignment_submissions_student_id'), ['student_id'], unique=False)

    with op.batch_alter_table('grade_items', schema=None) as batch_op:
        batch_op.add_column(sa.Column('assignment_id', sa.Integer(), nullable=True))
        batch_op.create_index(batch_op.f('ix_grade_items_assignment_id'), ['assignment_id'], unique=False)
        batch_op.create_foreign_key(None, 'assignments', ['assignment_id'], ['id'])

    # ### end Alembic commands ###


def downgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    with op.batch_alter_table('grade_items', schema=None) as batch_op:
        batch_op.drop_constraint(None, type_='foreignkey')
        batch_op.drop_index(batch_op.f('ix_grade_items_assignment_id'))
        batch_op.drop_column('assignment_id')

    with op.batch_alter_table('assignment_submissions', schema=None) as batch_op:
        batch_op.drop_index(batch_op.f('ix_assignment_submissions_student_id'))
        batch_op.drop_index(batch_op.f('ix_assignment_submissions_assignment_id'))

    op.drop_table('assignment_submissions')
    with op.batch_alter_table('assignments', schema=None) as batch_op:
        batch_op.drop_index(batch_op.f('ix_assignments_course_id'))

    op.drop_table('assignments')
    # ### end Alembic commands ###
