from django.apps import apps
from django.core.management.base import BaseCommand

from django.db.models import F, Value
from django.db.models.functions import Replace


class Command(BaseCommand):
    def add_arguments(self, parser):
        parser.add_argument(
            "--old",
            type=str,
            help="Old Host, most likely https://envipath.org/",
            required=True,
        )
        parser.add_argument(
            "--new",
            type=str,
            help="New Host, most likely http://localhost:8000/",
            required=True,
        )

    def handle(self, *args, **options):
        MODELS = [
            "User",
            "Group",
            "Package",
            "Compound",
            "CompoundStructure",
            "Pathway",
            "Edge",
            "Node",
            "Reaction",
            "SimpleAmbitRule",
            "SimpleRDKitRule",
            "ParallelRule",
            "SequentialRule",
            "Scenario",
            "Setting",
            "MLRelativeReasoning",
            "RuleBasedRelativeReasoning",
            "EnviFormer",
            "ApplicabilityDomain",
            "EnzymeLink",
        ]
        for model in MODELS:
            obj_cls = apps.get_model("epdb", model)
            print(f"Localizing urls for {model}")
            obj_cls.objects.update(
                url=Replace(F("url"), Value(options["old"]), Value(options["new"]))
            )
