from api.models import TtActivitySequencing

def helper_build_update_sequencing_data(activity_id, sequencing_activity_id, from_type):
    """
    helper to create both side data only
    """
    if from_type == "same_time":
        forward_type = TtActivitySequencing.TYPE_TO_CODE["same_time"]
        reverse_type = TtActivitySequencing.TYPE_TO_CODE["same_time"]
    elif from_type == "preceding":
        forward_type = TtActivitySequencing.TYPE_TO_CODE["preceding"]
        reverse_type = TtActivitySequencing.TYPE_TO_CODE["succeeding"]
    elif from_type == "succeeding":
        forward_type = TtActivitySequencing.TYPE_TO_CODE["succeeding"]
        reverse_type = TtActivitySequencing.TYPE_TO_CODE["preceding"]
    else:
        return []

    return [
        TtActivitySequencing(
            activity_id=activity_id,
            sequencing_activity_id=sequencing_activity_id,
            type=forward_type,
        ),
        TtActivitySequencing(
            activity_id=sequencing_activity_id,
            sequencing_activity_id=activity_id,
            type=reverse_type,
        ),
    ]

def helper_build_update_redis_sequencing_data(activity):
    redis_same_time_ids = set()
    redis_preceding_ids = set()
    redis_succeeding_ids = set()
    for val in activity.sequencing_from.all():
        if val.type == TtActivitySequencing.TYPE_TO_CODE["same_time"]:
            redis_same_time_ids.add(val.sequencing_activity_id)
        elif val.type == TtActivitySequencing.TYPE_TO_CODE["preceding"]:
            redis_preceding_ids.add(val.sequencing_activity_id)
        elif val.type == TtActivitySequencing.TYPE_TO_CODE["succeeding"]:
            redis_succeeding_ids.add(val.sequencing_activity_id)
    return {
        "id": activity.id,
        "sequencing": {
            "same_time": list(redis_same_time_ids),
            "preceding": list(redis_preceding_ids),
            "succeeding": list(redis_succeeding_ids),
            "min_slot_required": activity.min_slot_required if activity.min_slot_required is not None else -1,
            "max_slot_required": activity.max_slot_required if activity.max_slot_required is not None else -1,
        }
    }