#!/usr/bin/env bash
# Pipeline: gitea_init_app — Crea repo en Gitea, sube directorio y añade colaborador egutierrez
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../infra/gitea_create_repo.sh"
source "$SCRIPT_DIR/../infra/gitea_push_directory.sh"
source "$SCRIPT_DIR/../infra/gitea_add_collaborator.sh"

main() {
    local directory=""
    local owner=""
    local name=""
    local private="false"

    # Parsear argumentos
    while [[ $# -gt 0 ]]; do
        case "$1" in
            --directory) directory="$2"; shift 2 ;;
            --owner)     owner="$2";     shift 2 ;;
            --name)      name="$2";      shift 2 ;;
            --private)   private="$2";   shift 2 ;;
            *)
                # Argumentos posicionales: directory owner [name] [private]
                if [[ -z "$directory" ]]; then
                    directory="$1"
                elif [[ -z "$owner" ]]; then
                    owner="$1"
                elif [[ -z "$name" ]]; then
                    name="$1"
                else
                    private="$1"
                fi
                shift
                ;;
        esac
    done

    if [[ -z "$directory" || -z "$owner" ]]; then
        echo "gitea_init_app: uso: gitea_init_app <directory> <owner> [name] [private]" >&2
        echo "gitea_init_app: o con flags: --directory <dir> --owner <owner> [--name <name>] [--private true]" >&2
        return 1
    fi

    # Inferir nombre del repo desde basename del directorio si no se especificó
    if [[ -z "$name" ]]; then
        name=$(basename "$directory")
        echo "gitea_init_app: nombre inferido del directorio: '$name'" >&2
    fi

    if [[ -z "${GITEA_URL:-}" ]]; then
        echo "gitea_init_app: GITEA_URL no está seteada" >&2
        return 1
    fi
    if [[ -z "${GITEA_TOKEN:-}" ]]; then
        echo "gitea_init_app: GITEA_TOKEN no está seteado" >&2
        return 1
    fi

    echo "gitea_init_app: iniciando pipeline para '$owner/$name'..." >&2
    echo "gitea_init_app: directorio fuente: '$directory'" >&2

    # Paso 1: Crear repo
    echo "gitea_init_app: [1/3] creando repositorio..." >&2
    gitea_create_repo "$owner" "$name" "$private" "" > /dev/null

    # Paso 2: Subir directorio
    echo "gitea_init_app: [2/3] subiendo directorio al repositorio..." >&2
    gitea_push_directory "$directory" "$owner" "$name"

    # Paso 3: Añadir colaborador egutierrez con permisos admin
    echo "gitea_init_app: [3/3] añadiendo colaborador egutierrez..." >&2
    gitea_add_collaborator "$owner" "$name" "egutierrez" "admin"

    echo "gitea_init_app: pipeline completado — ${GITEA_URL}/${owner}/${name}" >&2
    echo "${GITEA_URL}/${owner}/${name}"
}

main "$@"
