# Generated by Django 5.0.14 on 2026-02-04 22:11

import colorfield.fields
import django.db.models.deletion
import traduction.mixins
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('cms', '0001_initial'),
    ]

    operations = [
        migrations.CreateModel(
            name='AdmissionRequirement',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=200, verbose_name='Titre')),
                ('description', models.TextField(verbose_name='Description')),
                ('requirement_type', models.CharField(choices=[('education', 'Formation'), ('language', 'Langue'), ('documents', 'Documents'), ('other', 'Autre')], max_length=20, verbose_name='Type')),
                ('icon', models.CharField(blank=True, max_length=50, verbose_name='Icone')),
                ('order', models.PositiveIntegerField(default=0, verbose_name='Ordre')),
                ('is_active', models.BooleanField(default=True, verbose_name='Actif')),
            ],
            options={
                'verbose_name': "Condition d'admission",
                'verbose_name_plural': "Conditions d'admission",
                'ordering': ['order'],
            },
            bases=(traduction.mixins.TranslatableMixin, models.Model),
        ),
        migrations.CreateModel(
            name='Course',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('code', models.CharField(max_length=20, verbose_name='Code')),
                ('title', models.CharField(max_length=200, verbose_name='Titre')),
                ('description', models.TextField(blank=True, verbose_name='Description')),
                ('credits', models.PositiveIntegerField(default=6, verbose_name='Credits ECTS')),
                ('is_mandatory', models.BooleanField(default=True, verbose_name='Obligatoire')),
                ('order', models.PositiveIntegerField(default=0, verbose_name='Ordre')),
            ],
            options={
                'verbose_name': 'Cours',
                'verbose_name_plural': 'Cours',
                'ordering': ['order', 'code'],
            },
            bases=(traduction.mixins.TranslatableMixin, models.Model),
        ),
        migrations.CreateModel(
            name='FAQItem',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('question', models.CharField(max_length=300, verbose_name='Question')),
                ('answer', models.TextField(verbose_name='Reponse')),
                ('category', models.CharField(choices=[('program', 'Programme'), ('admission', 'Admission'), ('mobility', 'Mobilite'), ('scholarships', 'Bourses'), ('housing', 'Logement'), ('career', 'Carrieres'), ('other', 'Autre')], max_length=20, verbose_name='Categorie')),
                ('order', models.PositiveIntegerField(default=0, verbose_name='Ordre')),
                ('is_active', models.BooleanField(default=True, verbose_name='Active')),
            ],
            options={
                'verbose_name': 'FAQ',
                'verbose_name_plural': 'FAQ',
                'ordering': ['category', 'order'],
            },
            bases=(traduction.mixins.TranslatableMixin, models.Model),
        ),
        migrations.CreateModel(
            name='Program',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=200, verbose_name='Nom du programme')),
                ('full_name', models.CharField(blank=True, max_length=300, verbose_name='Nom complet')),
                ('description', models.TextField(verbose_name='Description')),
                ('tagline', models.CharField(blank=True, max_length=300, verbose_name='Slogan')),
                ('duration_months', models.PositiveIntegerField(default=24, verbose_name='Duree (mois)')),
                ('ects_credits', models.PositiveIntegerField(default=120, verbose_name='Credits ECTS')),
                ('language', models.CharField(default='Anglais', max_length=50, verbose_name='Langue')),
                ('degree_awarded', models.CharField(default='Master of Science', max_length=200, verbose_name='Diplome delivre')),
                ('objectives', models.TextField(blank=True, verbose_name='Objectifs du programme')),
                ('career_prospects', models.TextField(blank=True, verbose_name='Debouches professionnels')),
            ],
            options={
                'verbose_name': 'Programme',
                'verbose_name_plural': 'Programmes',
            },
            bases=(traduction.mixins.TranslatableMixin, models.Model),
        ),
        migrations.CreateModel(
            name='Scholarship',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=200, verbose_name='Nom')),
                ('description', models.TextField(verbose_name='Description')),
                ('amount', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='Montant (EUR)')),
                ('coverage_type', models.CharField(choices=[('full', 'Bourse complete'), ('tuition', 'Frais de scolarite'), ('partial', 'Partielle'), ('living', 'Frais de vie')], max_length=20, verbose_name='Type de couverture')),
                ('requirements', models.TextField(blank=True, verbose_name='Conditions')),
                ('funded_by', models.CharField(blank=True, max_length=200, verbose_name='Finance par')),
                ('total_available', models.PositiveIntegerField(blank=True, null=True, verbose_name='Nombre disponible')),
                ('application_url', models.URLField(blank=True, verbose_name='Lien de candidature')),
                ('is_active', models.BooleanField(default=True, verbose_name='Active')),
                ('order', models.PositiveIntegerField(default=0, verbose_name='Ordre')),
            ],
            options={
                'verbose_name': 'Bourse',
                'verbose_name_plural': 'Bourses',
                'ordering': ['order'],
            },
            bases=(traduction.mixins.TranslatableMixin, models.Model),
        ),
        migrations.CreateModel(
            name='Specialization',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=100, verbose_name='Nom')),
                ('description', models.TextField(verbose_name='Description')),
                ('icon', models.CharField(blank=True, max_length=50, verbose_name='Icone')),
                ('color', colorfield.fields.ColorField(default='#2563eb', image_field=None, max_length=25, samples=None, verbose_name='Couleur')),
                ('order', models.PositiveIntegerField(default=0, verbose_name='Ordre')),
            ],
            options={
                'verbose_name': 'Specialisation',
                'verbose_name_plural': 'Specialisations',
                'ordering': ['order'],
            },
            bases=(traduction.mixins.TranslatableMixin, models.Model),
        ),
        migrations.CreateModel(
            name='ApplicationCall',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=200, verbose_name='Titre')),
                ('academic_year', models.CharField(help_text='Ex: 2025-2026', max_length=9, unique=True, verbose_name='Annee academique')),
                ('description', models.TextField(blank=True, verbose_name='Description')),
                ('status', models.CharField(choices=[('upcoming', 'A venir'), ('open', 'Ouvert'), ('closed', 'Cloture'), ('results', 'Resultats publies')], default='upcoming', max_length=20, verbose_name='Statut')),
                ('opening_date', models.DateField(verbose_name="Date d'ouverture")),
                ('deadline_date', models.DateField(verbose_name='Date limite de candidature')),
                ('results_date', models.DateField(blank=True, null=True, verbose_name='Date des resultats')),
                ('start_date', models.DateField(blank=True, null=True, verbose_name='Date de rentree')),
                ('application_url', models.URLField(blank=True, verbose_name='Lien de candidature')),
                ('application_email', models.EmailField(blank=True, max_length=254, verbose_name='Email de contact')),
                ('places_available', models.PositiveIntegerField(blank=True, null=True, verbose_name='Nombre de places')),
                ('scholarships_available', models.PositiveIntegerField(blank=True, null=True, verbose_name='Bourses disponibles')),
                ('documents_required', models.TextField(blank=True, help_text='Liste des documents (un par ligne)', verbose_name='Documents requis')),
                ('additional_info', models.TextField(blank=True, verbose_name='Informations complementaires')),
                ('is_active', models.BooleanField(default=True, verbose_name='Actif')),
                ('is_featured', models.BooleanField(default=False, verbose_name='Mis en avant')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Cree le')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Modifie le')),
                ('cms_page', models.ForeignKey(blank=True, help_text='Page CMS associee a cette instance', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(app_label)s_%(class)s_instances', to='cms.page', verbose_name='Page CMS')),
            ],
            options={
                'verbose_name': 'Appel a candidature',
                'verbose_name_plural': 'Appels a candidature',
                'ordering': ['-academic_year'],
            },
            bases=(traduction.mixins.TranslatableMixin, models.Model),
        ),
        migrations.CreateModel(
            name='ApplicationTimeline',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=200, verbose_name='Titre')),
                ('description', models.TextField(blank=True, verbose_name='Description')),
                ('event_date', models.DateField(verbose_name='Date')),
                ('event_type', models.CharField(choices=[('open', 'Ouverture'), ('deadline', 'Date limite'), ('results', 'Resultats'), ('start', 'Rentree'), ('info', 'Information'), ('interview', 'Entretiens')], max_length=20, verbose_name='Type')),
                ('academic_year', models.CharField(blank=True, help_text='Ex: 2024-2025', max_length=9, verbose_name='Annee academique')),
                ('icon', models.CharField(blank=True, help_text='Classe Font Awesome', max_length=50, verbose_name='Icone')),
                ('is_completed', models.BooleanField(default=False, verbose_name='Termine')),
                ('order', models.PositiveIntegerField(default=0, verbose_name='Ordre')),
                ('application_call', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='timeline_events', to='program.applicationcall', verbose_name='Appel a candidature')),
            ],
            options={
                'verbose_name': 'Etape calendrier',
                'verbose_name_plural': 'Calendrier candidatures',
                'ordering': ['order', 'event_date'],
            },
            bases=(traduction.mixins.TranslatableMixin, models.Model),
        ),
        migrations.CreateModel(
            name='ProgramHighlight',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=100, verbose_name='Titre')),
                ('description', models.TextField(verbose_name='Description')),
                ('icon', models.CharField(blank=True, max_length=50, verbose_name='Icone')),
                ('order', models.PositiveIntegerField(default=0, verbose_name='Ordre')),
                ('program', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='highlights', to='program.program', verbose_name='Programme')),
            ],
            options={
                'verbose_name': 'Point fort',
                'verbose_name_plural': 'Points forts',
                'ordering': ['order'],
            },
            bases=(traduction.mixins.TranslatableMixin, models.Model),
        ),
        migrations.CreateModel(
            name='Semester',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('number', models.PositiveIntegerField(verbose_name='Numero')),
                ('title', models.CharField(max_length=100, verbose_name='Titre')),
                ('description', models.TextField(blank=True, verbose_name='Description')),
                ('program', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='semesters', to='program.program', verbose_name='Programme')),
            ],
            options={
                'verbose_name': 'Semestre',
                'verbose_name_plural': 'Semestres',
                'ordering': ['number'],
            },
            bases=(traduction.mixins.TranslatableMixin, models.Model),
        ),
    ]
