# Part 2 — projects, module_type, mentorship flag (NOT APPLIED YET)
# Review, then: python manage.py migrate courses 0006

import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ('courses', '0005_course_exam_track_taxonomy'),
    ]

    operations = [
        migrations.AddField(
            model_name='course',
            name='mentorship_available',
            field=models.BooleanField(default=False, help_text='Learning Path only: optional paid mentorship add-on can be offered (pricing in Part 3).'),
        ),
        migrations.CreateModel(
            name='Project',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=200)),
                ('description', models.TextField()),
                ('brief_document_url', models.URLField(blank=True, help_text='Link to project brief (PDF/Drive/Notion).')),
                ('brief_file', models.FileField(blank=True, null=True, upload_to='project_briefs/')),
                ('submission_type', models.CharField(choices=[('github_link', 'GitHub link'), ('file_upload', 'File upload'), ('figma_link', 'Figma link'), ('live_url', 'Live URL')], default='github_link', max_length=20)),
                ('rubric', models.JSONField(blank=True, default=dict, help_text='Rubric as JSON (criteria → weight/description) or store prose under key "text".')),
                ('order', models.PositiveIntegerField(default=0, help_text='order_index')),
                ('is_active', models.BooleanField(default=True)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='projects', to='courses.course')),
            ],
            options={
                'verbose_name': 'Project',
                'verbose_name_plural': 'Projects',
                'ordering': ['order', 'id'],
            },
        ),
        migrations.AddField(
            model_name='module',
            name='module_type',
            field=models.CharField(choices=[('theory', 'Theory'), ('project', 'Project / practice')], default='theory', help_text='Theory vs project/practice — used for 20/80 curriculum mix display.', max_length=20),
        ),
        migrations.AddField(
            model_name='module',
            name='linked_project',
            field=models.ForeignKey(blank=True, help_text='Optional linked project when module_type is project.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='modules', to='courses.project'),
        ),
        migrations.CreateModel(
            name='ProjectSubmission',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('submission_url', models.URLField(blank=True, help_text='GitHub / Figma / live URL when submission_type is a link.')),
                ('submission_file', models.FileField(blank=True, help_text='File upload when required.', null=True, upload_to='project_submissions/')),
                ('screenshot', models.ImageField(blank=True, help_text='Optional screenshot for portfolio.', null=True, upload_to='project_screenshots/')),
                ('status', models.CharField(choices=[('pending', 'Pending review'), ('approved', 'Approved'), ('needs_revision', 'Needs revision'), ('rejected', 'Rejected')], db_index=True, default='pending', max_length=20)),
                ('mentor_feedback', models.TextField(blank=True)),
                ('submitted_at', models.DateTimeField(auto_now_add=True)),
                ('reviewed_at', models.DateTimeField(blank=True, null=True)),
                ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='submissions', to='courses.project')),
                ('reviewed_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='reviewed_project_submissions', to=settings.AUTH_USER_MODEL)),
                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='project_submissions', to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'verbose_name': 'Project submission',
                'verbose_name_plural': 'Project submissions',
                'ordering': ['-submitted_at'],
            },
        ),
        migrations.AddConstraint(
            model_name='projectsubmission',
            constraint=models.UniqueConstraint(fields=('user', 'project'), name='uniq_user_project_submission'),
        ),
    ]
