# Generated for Part 1 — Course & Category Taxonomy (NOT APPLIED YET)
# Review this file, then run: python manage.py migrate courses 0005

import django.core.validators
import django.db.models.deletion
from decimal import Decimal
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ('courses', '0004_category_and_contact_inquiry'),
    ]

    operations = [
        migrations.CreateModel(
            name='CertificateTemplate',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=120)),
                ('slug', models.SlugField(blank=True, max_length=140, unique=True)),
                ('description', models.CharField(blank=True, max_length=255)),
                ('is_active', models.BooleanField(default=True)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
            ],
            options={
                'ordering': ['name'],
            },
        ),
        migrations.AddField(
            model_name='course',
            name='badge_icon',
            field=models.ImageField(blank=True, help_text='Badge / icon shown on completion.', null=True, upload_to='course_badges/'),
        ),
        migrations.AddField(
            model_name='course',
            name='direct_exam_only_price',
            field=models.DecimalField(blank=True, decimal_places=2, help_text='Price for Direct Certification Path (skip learning). Defaults to exam_fee if blank.', max_digits=10, null=True),
        ),
        migrations.AddField(
            model_name='course',
            name='duration_minutes',
            field=models.PositiveIntegerField(default=120, help_text='Exam timer in minutes (default 120 for 100 MCQs).'),
        ),
        migrations.AddField(
            model_name='course',
            name='exam_fee',
            field=models.DecimalField(decimal_places=2, default=Decimal('0.00'), help_text='Standard certification exam fee.', max_digits=10),
        ),
        migrations.AddField(
            model_name='course',
            name='has_learning_content',
            field=models.BooleanField(default=True, help_text='If True, show Start Learning path. If False, Direct Exam only.'),
        ),
        migrations.AddField(
            model_name='course',
            name='is_active',
            field=models.BooleanField(default=True, help_text='Inactive tracks are hidden from public listings.'),
        ),
        migrations.AddField(
            model_name='course',
            name='learning_completion_required_percent',
            field=models.PositiveSmallIntegerField(default=100, help_text='Learning Path must complete this %% of modules before Take Exam is unlocked.', validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(100)]),
        ),
        migrations.AddField(
            model_name='course',
            name='learning_price',
            field=models.DecimalField(blank=True, decimal_places=2, help_text='Price for Learning Path (content + eventual exam). Null = free learning or N/A.', max_digits=10, null=True),
        ),
        migrations.AddField(
            model_name='course',
            name='level',
            field=models.CharField(choices=[('beginner', 'Beginner'), ('intermediate', 'Intermediate'), ('advanced', 'Advanced')], default='beginner', max_length=20),
        ),
        migrations.AddField(
            model_name='course',
            name='pass_percentage',
            field=models.PositiveSmallIntegerField(default=70, help_text='Minimum score % to pass (default 70).', validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100)]),
        ),
        migrations.AddField(
            model_name='course',
            name='question_count_per_attempt',
            field=models.PositiveIntegerField(default=100, help_text='MCQs drawn per exam attempt (default 100).'),
        ),
        migrations.AddField(
            model_name='course',
            name='reattempt_fee',
            field=models.DecimalField(decimal_places=2, default=Decimal('0.00'), help_text='Fee for each exam reattempt after a fail.', max_digits=10),
        ),
        migrations.AddField(
            model_name='course',
            name='requires_practical',
            field=models.BooleanField(default=False, help_text='Needs practical submission in addition to MCQs (later part).'),
        ),
        migrations.AddField(
            model_name='course',
            name='total_bank_size',
            field=models.PositiveIntegerField(default=800, help_text='Target size of the active question bank (default 800).'),
        ),
        migrations.AddField(
            model_name='course',
            name='certificate_template',
            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='courses', to='courses.certificatetemplate'),
        ),
        migrations.AlterField(
            model_name='course',
            name='duration',
            field=models.CharField(blank=True, default='', help_text='Human-readable study duration, e.g. "4 weeks".', max_length=50),
        ),
        migrations.AlterField(
            model_name='course',
            name='price',
            field=models.DecimalField(decimal_places=2, default=0.0, help_text='Legacy course card price. Prefer learning_price / exam fees below.', max_digits=8),
        ),
        migrations.AlterField(
            model_name='course',
            name='title',
            field=models.CharField(help_text='Course / exam track name.', max_length=200),
        ),
        migrations.AddField(
            model_name='module',
            name='content_body',
            field=models.TextField(blank=True, help_text='Text / HTML body for text or mixed modules.'),
        ),
        migrations.AddField(
            model_name='module',
            name='content_type',
            field=models.CharField(choices=[('video', 'Video'), ('text', 'Text'), ('pdf', 'PDF'), ('mixed', 'Mixed')], default='mixed', max_length=20),
        ),
        migrations.AddField(
            model_name='module',
            name='content_url',
            field=models.URLField(blank=True, help_text='YouTube/Vimeo unlisted link, or PDF URL.'),
        ),
        migrations.AddField(
            model_name='module',
            name='description',
            field=models.TextField(blank=True),
        ),
        migrations.AddField(
            model_name='module',
            name='is_free_preview',
            field=models.BooleanField(default=False, help_text='Visible without Learning Path enrollment.'),
        ),
        migrations.AddField(
            model_name='module',
            name='pdf_file',
            field=models.FileField(blank=True, help_text='Optional uploaded PDF for PDF/mixed modules.', null=True, upload_to='module_pdfs/'),
        ),
        migrations.AlterField(
            model_name='module',
            name='order',
            field=models.PositiveIntegerField(default=0, help_text='Display order (order_index).'),
        ),
        migrations.CreateModel(
            name='UserCourseProgress',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('completed_at', models.DateTimeField(blank=True, null=True)),
                ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_progress', to='courses.course')),
                ('module', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_progress', to='courses.module')),
                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='course_progress', to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'verbose_name': 'User course progress',
                'verbose_name_plural': 'User course progress',
                'ordering': ['-completed_at'],
            },
        ),
        migrations.AddConstraint(
            model_name='usercourseprogress',
            constraint=models.UniqueConstraint(fields=('user', 'course', 'module'), name='uniq_user_course_module_progress'),
        ),
    ]
