# Generated by Django 5.1.5 on 2025-03-10 11:38

import uuid

import django.core.validators
import django.db.models.deletion
import django_extensions.db.fields
import mptt.fields
from django.db import migrations, models

import core.utils
import core.validators


class Migration(migrations.Migration):
    initial = True

    operations = [
        migrations.CreateModel(
            name="Feedback",
            fields=[
                (
                    "uuid",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="unique id is used to surely identify any database object",
                        primary_key=True,
                        serialize=False,
                        verbose_name="unique id",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True,
                        help_text="if set to false, this object can't be seen by users without needed permission",
                        verbose_name="is active",
                    ),
                ),
                (
                    "created",
                    django_extensions.db.fields.CreationDateTimeField(
                        auto_now_add=True,
                        help_text="when the object first appeared on the database",
                        verbose_name="created",
                    ),
                ),
                (
                    "modified",
                    django_extensions.db.fields.ModificationDateTimeField(
                        auto_now=True, help_text="when the object was last modified", verbose_name="modified"
                    ),
                ),
                (
                    "comment",
                    models.TextField(
                        blank=True,
                        help_text="user-provided comments about their experience with the product",
                        null=True,
                        verbose_name="feedback comments",
                    ),
                ),
                (
                    "rating",
                    models.FloatField(
                        blank=True,
                        help_text="user-assigned rating for the product",
                        null=True,
                        validators=[
                            django.core.validators.MinValueValidator(0),
                            django.core.validators.MaxValueValidator(10),
                        ],
                        verbose_name="product rating",
                    ),
                ),
            ],
            options={
                "verbose_name": "feedback",
                "verbose_name_plural": "feedbacks",
            },
        ),
        migrations.CreateModel(
            name="OrderProduct",
            fields=[
                (
                    "uuid",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="unique id is used to surely identify any database object",
                        primary_key=True,
                        serialize=False,
                        verbose_name="unique id",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True,
                        help_text="if set to false, this object can't be seen by users without needed permission",
                        verbose_name="is active",
                    ),
                ),
                (
                    "created",
                    django_extensions.db.fields.CreationDateTimeField(
                        auto_now_add=True,
                        help_text="when the object first appeared on the database",
                        verbose_name="created",
                    ),
                ),
                (
                    "modified",
                    django_extensions.db.fields.ModificationDateTimeField(
                        auto_now=True, help_text="when the object was last modified", verbose_name="modified"
                    ),
                ),
                (
                    "buy_price",
                    models.FloatField(
                        blank=True,
                        help_text="the price paid by the customer for this product at purchase time",
                        null=True,
                        verbose_name="purchase price at order time",
                    ),
                ),
                (
                    "comments",
                    models.TextField(
                        blank=True,
                        help_text="internal comments for admins about this ordered product",
                        null=True,
                        verbose_name="internal comments",
                    ),
                ),
                (
                    "notifications",
                    models.JSONField(
                        blank=True,
                        help_text="json structure of notifications to display to users",
                        null=True,
                        verbose_name="user notifications",
                    ),
                ),
                (
                    "attributes",
                    models.JSONField(
                        blank=True,
                        help_text="json representation of this item's attributes",
                        null=True,
                        verbose_name="ordered product attributes",
                    ),
                ),
                (
                    "quantity",
                    models.PositiveIntegerField(
                        default=1,
                        help_text="quantity of this specific product in the order",
                        verbose_name="product quantity",
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("FINISHED", "finished"),
                            ("DELIVERING", "delivering"),
                            ("DELIVERED", "delivered"),
                            ("CANCELED", "canceled"),
                            ("FAILED", "failed"),
                            ("PENDING", "pending"),
                            ("ACCEPTED", "accepted"),
                            ("RETURNED", "money returned"),
                        ],
                        default="PENDING",
                        help_text="current status of this product in the order",
                        max_length=128,
                        verbose_name="product line status",
                    ),
                ),
            ],
            options={
                "verbose_name": "order product",
                "verbose_name_plural": "order products",
            },
        ),
        migrations.CreateModel(
            name="Product",
            fields=[
                (
                    "uuid",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="unique id is used to surely identify any database object",
                        primary_key=True,
                        serialize=False,
                        verbose_name="unique id",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True,
                        help_text="if set to false, this object can't be seen by users without needed permission",
                        verbose_name="is active",
                    ),
                ),
                (
                    "created",
                    django_extensions.db.fields.CreationDateTimeField(
                        auto_now_add=True,
                        help_text="when the object first appeared on the database",
                        verbose_name="created",
                    ),
                ),
                (
                    "modified",
                    django_extensions.db.fields.ModificationDateTimeField(
                        auto_now=True, help_text="when the object was last modified", verbose_name="modified"
                    ),
                ),
                (
                    "is_digital",
                    models.BooleanField(
                        default=False,
                        help_text="indicates whether this product is digitally delivered",
                        verbose_name="is product digital",
                    ),
                ),
                (
                    "name",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_en_GB",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_ar_AR",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_cs_CZ",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_da_DK",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_de_DE",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_en_US",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_es_ES",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_fr_FR",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_hi_IN",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_it_IT",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_ja_JP",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_kk_KZ",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_nl_NL",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_pl_PL",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_pt_BR",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_ro_RO",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_ru_RU",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "name_zh_hans",
                    models.CharField(
                        help_text="provide a clear identifying name for the product",
                        max_length=255,
                        null=True,
                        verbose_name="product name",
                    ),
                ),
                (
                    "description",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_en_GB",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_ar_AR",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_cs_CZ",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_da_DK",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_de_DE",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_en_US",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_es_ES",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_fr_FR",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_hi_IN",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_it_IT",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_ja_JP",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_kk_KZ",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_nl_NL",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_pl_PL",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_pt_BR",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_ro_RO",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_ru_RU",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
                (
                    "description_zh_hans",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="product description",
                    ),
                ),
            ],
            options={
                "verbose_name": "product",
                "verbose_name_plural": "products",
            },
        ),
        migrations.CreateModel(
            name="ProductImage",
            fields=[
                (
                    "uuid",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="unique id is used to surely identify any database object",
                        primary_key=True,
                        serialize=False,
                        verbose_name="unique id",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True,
                        help_text="if set to false, this object can't be seen by users without needed permission",
                        verbose_name="is active",
                    ),
                ),
                (
                    "created",
                    django_extensions.db.fields.CreationDateTimeField(
                        auto_now_add=True,
                        help_text="when the object first appeared on the database",
                        verbose_name="created",
                    ),
                ),
                (
                    "modified",
                    django_extensions.db.fields.ModificationDateTimeField(
                        auto_now=True, help_text="when the object was last modified", verbose_name="modified"
                    ),
                ),
                (
                    "alt",
                    models.CharField(
                        help_text="provide alternative text for the image for accessibility",
                        max_length=255,
                        verbose_name="image alt text",
                    ),
                ),
                (
                    "image",
                    models.ImageField(
                        help_text="upload the image file for this product",
                        upload_to=core.utils.get_product_uuid_as_path,
                        verbose_name="product image",
                    ),
                ),
                (
                    "priority",
                    models.IntegerField(
                        default=1,
                        help_text="determines the order in which images are displayed",
                        validators=[django.core.validators.MinValueValidator(1)],
                        verbose_name="display priority",
                    ),
                ),
            ],
            options={
                "verbose_name": "product image",
                "verbose_name_plural": "product images",
                "ordering": ("priority",),
            },
        ),
        migrations.CreateModel(
            name="ProductTag",
            fields=[
                (
                    "uuid",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="unique id is used to surely identify any database object",
                        primary_key=True,
                        serialize=False,
                        verbose_name="unique id",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True,
                        help_text="if set to false, this object can't be seen by users without needed permission",
                        verbose_name="is active",
                    ),
                ),
                (
                    "created",
                    django_extensions.db.fields.CreationDateTimeField(
                        auto_now_add=True,
                        help_text="when the object first appeared on the database",
                        verbose_name="created",
                    ),
                ),
                (
                    "modified",
                    django_extensions.db.fields.ModificationDateTimeField(
                        auto_now=True, help_text="when the object was last modified", verbose_name="modified"
                    ),
                ),
                (
                    "tag_name",
                    models.CharField(
                        help_text="internal tag identifier for the product tag", max_length=255, verbose_name="tag name"
                    ),
                ),
                (
                    "name",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_en_GB",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_ar_AR",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_cs_CZ",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_da_DK",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_de_DE",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_en_US",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_es_ES",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_fr_FR",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_hi_IN",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_it_IT",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_ja_JP",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_kk_KZ",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_nl_NL",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_pl_PL",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_pt_BR",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_ro_RO",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_ru_RU",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
                (
                    "name_zh_hans",
                    models.CharField(
                        help_text="user-friendly name for the product tag",
                        max_length=255,
                        null=True,
                        verbose_name="tag display name",
                    ),
                ),
            ],
            options={
                "verbose_name": "product tag",
                "verbose_name_plural": "product tags",
            },
        ),
        migrations.CreateModel(
            name="PromoCode",
            fields=[
                (
                    "uuid",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="unique id is used to surely identify any database object",
                        primary_key=True,
                        serialize=False,
                        verbose_name="unique id",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True,
                        help_text="if set to false, this object can't be seen by users without needed permission",
                        verbose_name="is active",
                    ),
                ),
                (
                    "created",
                    django_extensions.db.fields.CreationDateTimeField(
                        auto_now_add=True,
                        help_text="when the object first appeared on the database",
                        verbose_name="created",
                    ),
                ),
                (
                    "modified",
                    django_extensions.db.fields.ModificationDateTimeField(
                        auto_now=True, help_text="when the object was last modified", verbose_name="modified"
                    ),
                ),
                (
                    "code",
                    models.CharField(
                        default=core.utils.get_random_code,
                        help_text="unique code used by a user to redeem a discount",
                        max_length=20,
                        unique=True,
                        verbose_name="promo code identifier",
                    ),
                ),
                (
                    "discount_amount",
                    models.DecimalField(
                        blank=True,
                        decimal_places=2,
                        help_text="fixed discount amount applied if percent is not used",
                        max_digits=10,
                        null=True,
                        verbose_name="fixed discount amount",
                    ),
                ),
                (
                    "discount_percent",
                    models.IntegerField(
                        blank=True,
                        help_text="percentage discount applied if fixed amount is not used",
                        null=True,
                        validators=[
                            django.core.validators.MinValueValidator(1),
                            django.core.validators.MaxValueValidator(100),
                        ],
                        verbose_name="percentage discount",
                    ),
                ),
                (
                    "end_time",
                    models.DateTimeField(
                        blank=True,
                        help_text="timestamp when the promocode expires",
                        null=True,
                        verbose_name="end validity time",
                    ),
                ),
                (
                    "start_time",
                    models.DateTimeField(
                        blank=True,
                        help_text="timestamp from which this promocode is valid",
                        null=True,
                        verbose_name="start validity time",
                    ),
                ),
                (
                    "used_on",
                    models.DateTimeField(
                        blank=True,
                        help_text="timestamp when the promocode was used, blank if not used yet",
                        null=True,
                        verbose_name="usage timestamp",
                    ),
                ),
            ],
            options={
                "verbose_name": "promo code",
                "verbose_name_plural": "promo codes",
            },
        ),
        migrations.CreateModel(
            name="Promotion",
            fields=[
                (
                    "uuid",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="unique id is used to surely identify any database object",
                        primary_key=True,
                        serialize=False,
                        verbose_name="unique id",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True,
                        help_text="if set to false, this object can't be seen by users without needed permission",
                        verbose_name="is active",
                    ),
                ),
                (
                    "created",
                    django_extensions.db.fields.CreationDateTimeField(
                        auto_now_add=True,
                        help_text="when the object first appeared on the database",
                        verbose_name="created",
                    ),
                ),
                (
                    "modified",
                    django_extensions.db.fields.ModificationDateTimeField(
                        auto_now=True, help_text="when the object was last modified", verbose_name="modified"
                    ),
                ),
                (
                    "discount_percent",
                    models.IntegerField(
                        help_text="percentage discount for the selected products",
                        validators=[
                            django.core.validators.MinValueValidator(1),
                            django.core.validators.MaxValueValidator(100),
                        ],
                        verbose_name="discount percentage",
                    ),
                ),
                (
                    "name",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_en_GB",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_ar_AR",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_cs_CZ",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_da_DK",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_de_DE",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_en_US",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_es_ES",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_fr_FR",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_hi_IN",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_it_IT",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_ja_JP",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_kk_KZ",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_nl_NL",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_pl_PL",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_pt_BR",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_ro_RO",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_ru_RU",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "name_zh_hans",
                    models.CharField(
                        help_text="provide a unique name for this promotion",
                        max_length=256,
                        null=True,
                        unique=True,
                        verbose_name="promotion name",
                    ),
                ),
                (
                    "description",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_en_GB",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_ar_AR",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_cs_CZ",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_da_DK",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_de_DE",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_en_US",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_es_ES",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_fr_FR",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_hi_IN",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_it_IT",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_ja_JP",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_kk_KZ",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_nl_NL",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_pl_PL",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_pt_BR",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_ro_RO",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_ru_RU",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
                (
                    "description_zh_hans",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description of the product",
                        null=True,
                        verbose_name="promotion description",
                    ),
                ),
            ],
            options={
                "verbose_name": "promotion",
                "verbose_name_plural": "promotions",
            },
        ),
        migrations.CreateModel(
            name="Stock",
            fields=[
                (
                    "uuid",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="unique id is used to surely identify any database object",
                        primary_key=True,
                        serialize=False,
                        verbose_name="unique id",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True,
                        help_text="if set to false, this object can't be seen by users without needed permission",
                        verbose_name="is active",
                    ),
                ),
                (
                    "created",
                    django_extensions.db.fields.CreationDateTimeField(
                        auto_now_add=True,
                        help_text="when the object first appeared on the database",
                        verbose_name="created",
                    ),
                ),
                (
                    "modified",
                    django_extensions.db.fields.ModificationDateTimeField(
                        auto_now=True, help_text="when the object was last modified", verbose_name="modified"
                    ),
                ),
                (
                    "price",
                    models.FloatField(
                        default=0.0, help_text="final price to the customer after markups", verbose_name="selling price"
                    ),
                ),
                (
                    "purchase_price",
                    models.FloatField(
                        default=0.0,
                        help_text="the price paid to the vendor for this product",
                        verbose_name="vendor purchase price",
                    ),
                ),
                (
                    "quantity",
                    models.IntegerField(
                        default=0,
                        help_text="available quantity of the product in stock",
                        verbose_name="quantity in stock",
                    ),
                ),
                (
                    "sku",
                    models.CharField(
                        help_text="vendor-assigned SKU for identifying the product",
                        max_length=255,
                        verbose_name="vendor sku",
                    ),
                ),
                (
                    "digital_asset",
                    models.FileField(
                        blank=True,
                        default=None,
                        help_text="digital file associated with this stock if applicable",
                        null=True,
                        upload_to="downloadables/",
                        verbose_name="digital file",
                    ),
                ),
            ],
            options={
                "verbose_name": "stock",
                "verbose_name_plural": "stock entries",
            },
        ),
        migrations.CreateModel(
            name="Vendor",
            fields=[
                (
                    "uuid",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="unique id is used to surely identify any database object",
                        primary_key=True,
                        serialize=False,
                        verbose_name="unique id",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True,
                        help_text="if set to false, this object can't be seen by users without needed permission",
                        verbose_name="is active",
                    ),
                ),
                (
                    "created",
                    django_extensions.db.fields.CreationDateTimeField(
                        auto_now_add=True,
                        help_text="when the object first appeared on the database",
                        verbose_name="created",
                    ),
                ),
                (
                    "modified",
                    django_extensions.db.fields.ModificationDateTimeField(
                        auto_now=True, help_text="when the object was last modified", verbose_name="modified"
                    ),
                ),
                (
                    "authentication",
                    models.JSONField(
                        blank=True,
                        help_text="stores credentials and endpoints required for vendor communication",
                        null=True,
                        verbose_name="authentication info",
                    ),
                ),
                (
                    "markup_percent",
                    models.IntegerField(
                        default=0,
                        help_text="define the markup for products retrieved from this vendor",
                        validators=[
                            django.core.validators.MinValueValidator(0),
                            django.core.validators.MaxValueValidator(100),
                        ],
                        verbose_name="vendor markup percentage",
                    ),
                ),
                ("name", models.CharField(help_text="name of this vendor", max_length=255, verbose_name="vendor name")),
            ],
            options={
                "verbose_name": "vendor",
                "verbose_name_plural": "vendors",
            },
        ),
        migrations.CreateModel(
            name="Wishlist",
            fields=[
                (
                    "uuid",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="unique id is used to surely identify any database object",
                        primary_key=True,
                        serialize=False,
                        verbose_name="unique id",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True,
                        help_text="if set to false, this object can't be seen by users without needed permission",
                        verbose_name="is active",
                    ),
                ),
                (
                    "created",
                    django_extensions.db.fields.CreationDateTimeField(
                        auto_now_add=True,
                        help_text="when the object first appeared on the database",
                        verbose_name="created",
                    ),
                ),
                (
                    "modified",
                    django_extensions.db.fields.ModificationDateTimeField(
                        auto_now=True, help_text="when the object was last modified", verbose_name="modified"
                    ),
                ),
            ],
            options={
                "verbose_name": "wishlist",
                "verbose_name_plural": "wishlists",
            },
        ),
        migrations.CreateModel(
            name="AttributeGroup",
            fields=[
                (
                    "uuid",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="unique id is used to surely identify any database object",
                        primary_key=True,
                        serialize=False,
                        verbose_name="unique id",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True,
                        help_text="if set to false, this object can't be seen by users without needed permission",
                        verbose_name="is active",
                    ),
                ),
                (
                    "created",
                    django_extensions.db.fields.CreationDateTimeField(
                        auto_now_add=True,
                        help_text="when the object first appeared on the database",
                        verbose_name="created",
                    ),
                ),
                (
                    "modified",
                    django_extensions.db.fields.ModificationDateTimeField(
                        auto_now=True, help_text="when the object was last modified", verbose_name="modified"
                    ),
                ),
                (
                    "name",
                    models.CharField(
                        help_text="attribute group's name", max_length=255, verbose_name="attribute group's name"
                    ),
                ),
                (
                    "name_en_GB",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "name_ar_AR",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "name_cs_CZ",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "name_da_DK",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "name_de_DE",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "name_en_US",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "name_es_ES",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "name_fr_FR",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "name_hi_IN",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "name_it_IT",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "name_ja_JP",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "name_kk_KZ",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "name_nl_NL",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "name_pl_PL",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "name_pt_BR",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "name_ro_RO",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "name_ru_RU",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "name_zh_hans",
                    models.CharField(
                        help_text="attribute group's name",
                        max_length=255,
                        null=True,
                        verbose_name="attribute group's name",
                    ),
                ),
                (
                    "parent",
                    models.ForeignKey(
                        blank=True,
                        help_text="parent of this group",
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="children",
                        to="core.attributegroup",
                        verbose_name="parent attribute group",
                    ),
                ),
            ],
            options={
                "verbose_name": "attribute group",
                "verbose_name_plural": "attribute groups",
            },
        ),
        migrations.CreateModel(
            name="Attribute",
            fields=[
                (
                    "uuid",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="unique id is used to surely identify any database object",
                        primary_key=True,
                        serialize=False,
                        verbose_name="unique id",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True,
                        help_text="if set to false, this object can't be seen by users without needed permission",
                        verbose_name="is active",
                    ),
                ),
                (
                    "created",
                    django_extensions.db.fields.CreationDateTimeField(
                        auto_now_add=True,
                        help_text="when the object first appeared on the database",
                        verbose_name="created",
                    ),
                ),
                (
                    "modified",
                    django_extensions.db.fields.ModificationDateTimeField(
                        auto_now=True, help_text="when the object was last modified", verbose_name="modified"
                    ),
                ),
                (
                    "value_type",
                    models.CharField(
                        choices=[
                            ("string", "string"),
                            ("integer", "integer"),
                            ("float", "float"),
                            ("boolean", "boolean"),
                            ("array", "array"),
                            ("object", "object"),
                        ],
                        help_text="type of the attribute's value",
                        max_length=50,
                        verbose_name="value type",
                    ),
                ),
                (
                    "name",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_en_GB",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_ar_AR",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_cs_CZ",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_da_DK",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_de_DE",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_en_US",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_es_ES",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_fr_FR",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_hi_IN",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_it_IT",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_ja_JP",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_kk_KZ",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_nl_NL",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_pl_PL",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_pt_BR",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_ro_RO",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_ru_RU",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "name_zh_hans",
                    models.CharField(
                        help_text="name of this attribute", max_length=255, null=True, verbose_name="attribute's name"
                    ),
                ),
                (
                    "group",
                    models.ForeignKey(
                        help_text="group of this attribute",
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="attributes",
                        to="core.attributegroup",
                        verbose_name="attribute group",
                    ),
                ),
            ],
            options={
                "verbose_name": "attribute",
                "verbose_name_plural": "attributes",
            },
        ),
        migrations.CreateModel(
            name="AttributeValue",
            fields=[
                (
                    "uuid",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="unique id is used to surely identify any database object",
                        primary_key=True,
                        serialize=False,
                        verbose_name="unique id",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True,
                        help_text="if set to false, this object can't be seen by users without needed permission",
                        verbose_name="is active",
                    ),
                ),
                (
                    "created",
                    django_extensions.db.fields.CreationDateTimeField(
                        auto_now_add=True,
                        help_text="when the object first appeared on the database",
                        verbose_name="created",
                    ),
                ),
                (
                    "modified",
                    django_extensions.db.fields.ModificationDateTimeField(
                        auto_now=True, help_text="when the object was last modified", verbose_name="modified"
                    ),
                ),
                (
                    "value",
                    models.TextField(help_text="the specific value for this attribute", verbose_name="attribute value"),
                ),
                (
                    "value_en_GB",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "value_ar_AR",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "value_cs_CZ",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "value_da_DK",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "value_de_DE",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "value_en_US",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "value_es_ES",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "value_fr_FR",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "value_hi_IN",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "value_it_IT",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "value_ja_JP",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "value_kk_KZ",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "value_nl_NL",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "value_pl_PL",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "value_pt_BR",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "value_ro_RO",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "value_ru_RU",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "value_zh_hans",
                    models.TextField(
                        help_text="the specific value for this attribute", null=True, verbose_name="attribute value"
                    ),
                ),
                (
                    "attribute",
                    models.ForeignKey(
                        help_text="attribute of this value",
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="values",
                        to="core.attribute",
                        verbose_name="attribute",
                    ),
                ),
            ],
            options={
                "verbose_name": "attribute value",
                "verbose_name_plural": "attribute values",
            },
        ),
        migrations.CreateModel(
            name="Category",
            fields=[
                (
                    "uuid",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="unique id is used to surely identify any database object",
                        primary_key=True,
                        serialize=False,
                        verbose_name="unique id",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True,
                        help_text="if set to false, this object can't be seen by users without needed permission",
                        verbose_name="is active",
                    ),
                ),
                (
                    "created",
                    django_extensions.db.fields.CreationDateTimeField(
                        auto_now_add=True,
                        help_text="when the object first appeared on the database",
                        verbose_name="created",
                    ),
                ),
                (
                    "modified",
                    django_extensions.db.fields.ModificationDateTimeField(
                        auto_now=True, help_text="when the object was last modified", verbose_name="modified"
                    ),
                ),
                (
                    "image",
                    models.ImageField(
                        help_text="upload an image representing this category",
                        null=True,
                        upload_to="categories/",
                        validators=[core.validators.validate_category_image_dimensions],
                        verbose_name="category image",
                    ),
                ),
                (
                    "markup_percent",
                    models.IntegerField(
                        default=0,
                        help_text="define a markup percentage for products in this category",
                        validators=[
                            django.core.validators.MinValueValidator(0),
                            django.core.validators.MaxValueValidator(100),
                        ],
                        verbose_name="markup percentage",
                    ),
                ),
                (
                    "name",
                    models.CharField(
                        help_text="provide a name for this category", max_length=255, verbose_name="category name"
                    ),
                ),
                (
                    "name_en_GB",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "name_ar_AR",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "name_cs_CZ",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "name_da_DK",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "name_de_DE",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "name_en_US",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "name_es_ES",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "name_fr_FR",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "name_hi_IN",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "name_it_IT",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "name_ja_JP",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "name_kk_KZ",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "name_nl_NL",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "name_pl_PL",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "name_pt_BR",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "name_ro_RO",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "name_ru_RU",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "name_zh_hans",
                    models.CharField(
                        help_text="provide a name for this category",
                        max_length=255,
                        null=True,
                        verbose_name="category name",
                    ),
                ),
                (
                    "description",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_en_GB",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_ar_AR",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_cs_CZ",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_da_DK",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_de_DE",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_en_US",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_es_ES",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_fr_FR",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_hi_IN",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_it_IT",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_ja_JP",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_kk_KZ",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_nl_NL",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_pl_PL",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_pt_BR",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_ro_RO",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_ru_RU",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                (
                    "description_zh_hans",
                    models.TextField(
                        blank=True,
                        help_text="add a detailed description for this category",
                        null=True,
                        verbose_name="category description",
                    ),
                ),
                ("lft", models.PositiveIntegerField(editable=False)),
                ("rght", models.PositiveIntegerField(editable=False)),
                ("tree_id", models.PositiveIntegerField(db_index=True, editable=False)),
                ("level", models.PositiveIntegerField(editable=False)),
                (
                    "parent",
                    mptt.fields.TreeForeignKey(
                        blank=True,
                        help_text="parent of this category to form a hierarchical structure",
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="children",
                        to="core.category",
                        verbose_name="parent category",
                    ),
                ),
            ],
            options={
                "verbose_name": "category",
                "verbose_name_plural": "categories",
                "ordering": ["tree_id", "lft"],
            },
        ),
        migrations.CreateModel(
            name="Brand",
            fields=[
                (
                    "uuid",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="unique id is used to surely identify any database object",
                        primary_key=True,
                        serialize=False,
                        verbose_name="unique id",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True,
                        help_text="if set to false, this object can't be seen by users without needed permission",
                        verbose_name="is active",
                    ),
                ),
                (
                    "created",
                    django_extensions.db.fields.CreationDateTimeField(
                        auto_now_add=True,
                        help_text="when the object first appeared on the database",
                        verbose_name="created",
                    ),
                ),
                (
                    "modified",
                    django_extensions.db.fields.ModificationDateTimeField(
                        auto_now=True, help_text="when the object was last modified", verbose_name="modified"
                    ),
                ),
                ("name", models.CharField(help_text="name of this brand", max_length=255, verbose_name="brand name")),
                (
                    "category",
                    models.ForeignKey(
                        blank=True,
                        help_text="optional category that this brand is associated with",
                        null=True,
                        on_delete=django.db.models.deletion.PROTECT,
                        to="core.category",
                        verbose_name="associated category",
                    ),
                ),
            ],
            options={
                "verbose_name": "brand",
                "verbose_name_plural": "brands",
            },
        ),
        migrations.AddField(
            model_name="attribute",
            name="categories",
            field=models.ManyToManyField(
                help_text="category of this attribute",
                related_name="attributes",
                to="core.category",
                verbose_name="categories",
            ),
        ),
        migrations.CreateModel(
            name="Order",
            fields=[
                (
                    "uuid",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="unique id is used to surely identify any database object",
                        primary_key=True,
                        serialize=False,
                        verbose_name="unique id",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True,
                        help_text="if set to false, this object can't be seen by users without needed permission",
                        verbose_name="is active",
                    ),
                ),
                (
                    "created",
                    django_extensions.db.fields.CreationDateTimeField(
                        auto_now_add=True,
                        help_text="when the object first appeared on the database",
                        verbose_name="created",
                    ),
                ),
                (
                    "modified",
                    django_extensions.db.fields.ModificationDateTimeField(
                        auto_now=True, help_text="when the object was last modified", verbose_name="modified"
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("PENDING", "pending"),
                            ("FAILED", "failed"),
                            ("PAYMENT", "payment"),
                            ("CREATED", "created"),
                            ("DELIVERING", "delivering"),
                            ("FINISHED", "finished"),
                        ],
                        default="PENDING",
                        help_text="current status of the order in its lifecycle",
                        max_length=64,
                        verbose_name="order status",
                    ),
                ),
                (
                    "notifications",
                    models.JSONField(
                        blank=True,
                        help_text="json structure of notifications to display to users",
                        null=True,
                        verbose_name="notifications",
                    ),
                ),
                (
                    "attributes",
                    models.JSONField(
                        blank=True,
                        help_text="json representation of order attributes for this order",
                        null=True,
                        verbose_name="attributes",
                    ),
                ),
                (
                    "buy_time",
                    models.DateTimeField(
                        blank=True,
                        default=None,
                        help_text="the timestamp when the order was finalized",
                        null=True,
                        verbose_name="buy time",
                    ),
                ),
            ],
            options={
                "verbose_name": "order",
                "verbose_name_plural": "orders",
            },
        ),
    ]
