from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ObjectDoesNotExist
from extras.models import CustomField


def set_custom_fields_values(entity, custom_field_data):
    if not custom_field_data:
        return

    missing_cfs = []
    save = False
    for key, value in custom_field_data.items():
        try:
            cf = CustomField.objects.get(name=key)
        except ObjectDoesNotExist:
            missing_cfs.append(key)
        else:
            ct = ContentType.objects.get_for_model(entity)
            if ct not in cf.content_types.all():
                print(
                    f"⚠️ Custom field {key} is not enabled for {entity}'s model!"
                    "Please check the 'on_objects' for that custom field in custom_fields.yml"
                )
            elif key not in entity.custom_field_data:
                entity.custom_field_data[key] = value
                save = True

    if missing_cfs:
        raise Exception(
            f"⚠️ Custom field(s) '{missing_cfs}' requested for {entity} but not found in Netbox!"
            "Please chceck the custom_fields.yml"
        )

    if save:
        entity.save()


def pop_custom_fields(params):
    if "custom_field_data" in params:
        return params.pop("custom_field_data")
    elif "custom_fields" in params:
        print("⚠️ Please rename 'custom_fields' to 'custom_field_data'!")
        return params.pop("custom_fields")

    return None