# Generated by Django 6.0.4 on 2026-08-13 02:49

import django.db.models.deletion
import licenses.models
import uuid
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ("clients", "0001_initial"),
    ]

    operations = [
        migrations.CreateModel(
            name="License",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "license_key",
                    models.CharField(
                        default=licenses.models.generate_license_key,
                        editable=False,
                        max_length=30,
                        unique=True,
                        verbose_name="Código de licencia",
                    ),
                ),
                (
                    "license_type",
                    models.CharField(
                        choices=[
                            ("individual", "Individual"),
                            ("enterprise", "Enterprise"),
                        ],
                        default="individual",
                        max_length=20,
                        verbose_name="Tipo de licencia",
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("active", "Activa"),
                            ("inactive", "Inactiva"),
                            ("expired", "Vencida"),
                            ("suspendida", "Suspendida"),
                        ],
                        default="active",
                        max_length=20,
                        verbose_name="Estado",
                    ),
                ),
                (
                    "activated_at",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="Fecha de activación"
                    ),
                ),
                (
                    "expires_at",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="Fecha de vencimiento"
                    ),
                ),
                (
                    "max_users",
                    models.PositiveIntegerField(
                        default=1,
                        help_text="Número máximo de usuarios permitidos por esta licencia",
                        verbose_name="Cantidad máxima de usuarios",
                    ),
                ),
                (
                    "notes",
                    models.TextField(
                        blank=True, default="", verbose_name="Observaciones"
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(
                        auto_now_add=True, verbose_name="Fecha de creación"
                    ),
                ),
                (
                    "updated_at",
                    models.DateTimeField(
                        auto_now=True, verbose_name="Fecha de actualización"
                    ),
                ),
                (
                    "client",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="licenses",
                        to="clients.client",
                        verbose_name="Cliente",
                    ),
                ),
            ],
            options={
                "verbose_name": "licencia",
                "verbose_name_plural": "licencias",
                "ordering": ["-created_at"],
            },
        ),
        migrations.CreateModel(
            name="Installation",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "installation_id",
                    models.CharField(
                        editable=False,
                        help_text="Identificador único de la instalación de Probalis",
                        max_length=100,
                        unique=True,
                        verbose_name="Installation ID",
                    ),
                ),
                (
                    "installation_secret",
                    models.CharField(
                        help_text="Clave secreta para autenticación de la instalación",
                        max_length=128,
                        verbose_name="Installation Secret",
                    ),
                ),
                (
                    "domain",
                    models.CharField(
                        help_text="Dominio autorizado para esta instalación",
                        max_length=253,
                        verbose_name="Dominio autorizado",
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[("active", "Activa"), ("inactive", "Inactiva")],
                        default="active",
                        max_length=20,
                        verbose_name="Estado",
                    ),
                ),
                (
                    "registered_at",
                    models.DateTimeField(
                        auto_now_add=True, verbose_name="Fecha de registro"
                    ),
                ),
                (
                    "last_validated_at",
                    models.DateTimeField(
                        blank=True, null=True, verbose_name="Última validación"
                    ),
                ),
                (
                    "probalis_version",
                    models.CharField(
                        blank=True,
                        default="",
                        max_length=30,
                        verbose_name="Versión de Probalis",
                    ),
                ),
                (
                    "ip_address",
                    models.GenericIPAddressField(
                        blank=True, null=True, verbose_name="IP de origen"
                    ),
                ),
                (
                    "notes",
                    models.TextField(
                        blank=True, default="", verbose_name="Observaciones"
                    ),
                ),
                (
                    "license",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.PROTECT,
                        related_name="installations",
                        to="licenses.license",
                        verbose_name="Licencia",
                    ),
                ),
            ],
            options={
                "verbose_name": "instalación",
                "verbose_name_plural": "instalaciones",
                "ordering": ["-registered_at"],
            },
        ),
        migrations.CreateModel(
            name="LicenseValidation",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "validated_at",
                    models.DateTimeField(
                        auto_now_add=True, verbose_name="Fecha/hora de validación"
                    ),
                ),
                (
                    "result",
                    models.CharField(
                        choices=[("success", "Exitoso"), ("failure", "Fallido")],
                        max_length=20,
                        verbose_name="Resultado",
                    ),
                ),
                (
                    "rejection_reason",
                    models.CharField(
                        blank=True,
                        choices=[
                            ("license_not_found", "Licencia no encontrada"),
                            ("installation_not_found", "Instalación no encontrada"),
                            ("domain_mismatch", "Dominio no coincide"),
                            ("license_expired", "Licencia vencida"),
                            ("license_inactive", "Licencia inactiva"),
                            ("installation_inactive", "Instalación inactiva"),
                            ("invalid_credentials", "Credenciales inválidas"),
                        ],
                        default="",
                        max_length=50,
                        verbose_name="Motivo de rechazo",
                    ),
                ),
                (
                    "ip_address",
                    models.GenericIPAddressField(
                        blank=True, null=True, verbose_name="IP de origen"
                    ),
                ),
                (
                    "probalis_version",
                    models.CharField(
                        blank=True,
                        default="",
                        max_length=30,
                        verbose_name="Versión de Probalis",
                    ),
                ),
                (
                    "license_key_used",
                    models.CharField(
                        blank=True,
                        default="",
                        max_length=30,
                        verbose_name="Código de licencia consultado",
                    ),
                ),
                (
                    "installation_id_used",
                    models.CharField(
                        blank=True,
                        default="",
                        max_length=100,
                        verbose_name="Installation ID consultado",
                    ),
                ),
                (
                    "domain_used",
                    models.CharField(
                        blank=True,
                        default="",
                        max_length=253,
                        verbose_name="Dominio consultado",
                    ),
                ),
                (
                    "user_agent",
                    models.CharField(
                        blank=True,
                        default="",
                        max_length=500,
                        verbose_name="User-Agent",
                    ),
                ),
                (
                    "installation",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="validations",
                        to="licenses.installation",
                        verbose_name="Instalación",
                    ),
                ),
            ],
            options={
                "verbose_name": "validación",
                "verbose_name_plural": "validaciones",
                "ordering": ["-validated_at"],
            },
        ),
    ]
