from django.db import migrations


PERMISSION_FEATURE_MAP = {
    "DASHBOARD": ["USER_DASHBOARD"],
    "CUSTOMER_MANAGEMENT": [
        "ADD_CUSTOMER", "CUSTOMER_DETAILS", "CUSTOMER_DEVICE_DETAILS",
        "VIEW_CUSTOMER", "UPDATE_CUSTOMER", "DELETE_CUSTOMER",
        "TOGGLE_CUSTOMER_LOCK",
    ],
    "RESULTS": ["RESULT_LIST"],
    "PRODUCT_REGISTRY": [
        "ADD_PRODUCT", "VIEW_PRODUCT", "PRODUCT_LIST", "UPDATE_PRODUCT", "DELETE_ITEM",
        "ADD_CATELOG_TRANSLATION", "VIEW_CATELOG_TRANSLATION",
        "UPDATE_CATELOG_TRANSLATION", "DELETE_CATELOG_TRANSLATION",
        "CATELOG_TRANSLATION_LIST", "CATELOG_TRANSLATION_MATRIX",
        "ADD_CROPMAPPING", "VIEW_CROPMAPPING", "CROPMAPPING_DETAILS",
        "UPDATE_CROPMAPPING", "DELETE_CROPMAPPING",
    ],
    "CROP_REGISTRY": [
        "ADD_CROP", "VIEW_CROP", "CROP_DETAILS", "UPDATE_CROP", "DELETE_CROP",
        "ADD_CROP_TRANSLATION", "VIEW_CROP_TRANSLATION", "CROP_TRANSLATION_DETAILS",
        "UPDATE_CROP_TRANSLATION", "DELETE_CROP_TRANSLATION",
        "CROP_TRANSLATION_DETAILS_MATRIX",
    ],
    "MANAGEAPPVERSION": ["MANAGEAPPVERSION"],
    "APPSETTINGS": ["APPSETTINGS", "ABOUT_APP"],
    "LANGUAGE_REGISTRY": ["ADD_LANGUAGE", "VIEW_LANGUAGE", "LANGUAGE_LIST", "UPDATE_LANGUAGE", "DELETE_LANGUAGE"],
    "SCALE_REGISTRY": [
        "ADD_SCALE", "VIEW_SCALE", "SCALE_LIST", "UPDATE_SCALE", "DELETE_SCALE",
        "ADD_SCALECROPMAPPING", "VIEW_SCALECROPMAPPING", "SCALECROPMAPPING_DETAILS",
        "UPDATE_SCALECROPMAPPING", "DELETE_SCALECROPMAPPING", "BULK_UPLOAD",
    ],
    "REPORTS": ["ITEM_SALES_REPORT"],
    "PERMISSION_MANAGEMENT": ["MANAGE_PERMISSIONS"],
    "USER_MANAGEMENT": ["ADD_USER", "VIEW_USER", "UPDATE_USER", "DELETE_USER", "USER_DETAILS", "VIEW_MY_PROFILE", "CHANGE_MY_PASSWORD"],
}


def seed_wile_features(apps, schema_editor):
    MainFeature = apps.get_model("usermanagement", "MainFeature")
    SubFeature = apps.get_model("usermanagement", "SubFeature")

    for main_name, sub_names in PERMISSION_FEATURE_MAP.items():

        main_feature = MainFeature.objects.filter(feature_name=main_name).first()

        if not main_feature:
            main_feature = MainFeature.objects.create(feature_name=main_name)

        for sub_name in sub_names:
            existing_sub = SubFeature.objects.filter(
                main_feature=main_feature,
                feature_name=sub_name
            ).first()

            if not existing_sub:
                SubFeature.objects.create(
                    main_feature=main_feature,
                    feature_name=sub_name,
                    feature_type="MODULE",
                )


def reverse_seed_wile_features(apps, schema_editor):
    pass


class Migration(migrations.Migration):

    dependencies = [
        ("usermanagement", "0022_uppercase_features"),
    ]

    operations = [
        migrations.RunPython(seed_wile_features, reverse_seed_wile_features),
    ]