#!/bin/sh

echo "Validando origen del merge..."

set -eu

# Default seguro para evitar fallo con set -u cuando la variable no existe en CI/CD.
ENABLE_STRICT_MERGE_VALIDATION="${ENABLE_STRICT_MERGE_VALIDATION:-false}"

echo "ENABLE_STRICT_MERGE_VALIDATION: $ENABLE_STRICT_MERGE_VALIDATION"

if [ "$CI_PIPELINE_SOURCE" != "merge_request_event" ]; then
    echo "No es un pipeline de merge request, se omite validación."
    exit 0
fi

echo "Source branch: $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME"
echo "Target branch: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME"

ALLOWED_MASTER_SOURCE="false"

if [ "$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" = "develop" ]; then
    ALLOWED_MASTER_SOURCE="true"
fi

case "$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" in
    hotfix/*)
        ALLOWED_MASTER_SOURCE="true"
        ;;
esac

if [ "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" = "master" ] && \
    [ "$ALLOWED_MASTER_SOURCE" != "true" ]; then

    if [ "$ENABLE_STRICT_MERGE_VALIDATION" = "true" ]; then
        echo "[x] Solo se permite hacer merge a master desde develop o ramas hotfix/*"
        exit 1
    fi

    echo "[!] Verificación estricta deshabilitada: Se recomienda hacer merge a master solo desde develop o ramas hotfix/*"
    exit 0
fi

echo "[✓] Validación de ramas correcta"