#!/usr/bin/env bash
# onx-db-search — Bir veritabani icinde pattern ara (tablo isimleri veya tum sutunlar)
# Input:  {"db_name":"onx_xxx_app","pattern":"order","scope":"names|columns"}
#         scope default "names" — sadece tablo/sutun isimlerinde arar.
# Output: {"db_name":"...","pattern":"...","scope":"...","matches":[{"table":"...","column":"..." (scope=columns icin),...}]}

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/_lib/common.sh"

require_root
require_cmd mysql
onx_json_input

DB_NAME="$(onx_json_field db_name)"
PATTERN="$(onx_json_field pattern)"
SCOPE="$(onx_json_field scope 'names')"

[[ -z "$DB_NAME" ]] && onx_die 1 "db_name zorunlu"
[[ -z "$PATTERN" ]] && onx_die 1 "pattern zorunlu"
[[ "$DB_NAME" =~ ^[a-z0-9_]+$ ]] || onx_die 1 "Gecersiz db_name: '${DB_NAME}'"
# Pattern: SQL LIKE icin guvenli — sadece harf/rakam/altcizgi/% bosluk
[[ "$PATTERN" =~ ^[a-zA-Z0-9_\ %-]+$ ]] || onx_die 1 "Gecersiz pattern (yalnizca alfanumerik + _ % bosluk)"
case "$SCOPE" in
    names|columns) : ;;
    *) onx_die 1 "Gecersiz scope: '${SCOPE}' (names|columns)" ;;
esac

onx_log "db-search: db=${DB_NAME} pattern=${PATTERN} scope=${SCOPE}"

_mycnf_tmp

LIKE_PATTERN="%${PATTERN}%"

MATCHES_JSON="["
sep=""

if [[ "$SCOPE" == "names" ]]; then
    # Sadece tablo isimleri
    RESULT="$(mysql --defaults-extra-file="$_MYCNF_TMP" --batch --silent --raw information_schema -e \
        "SELECT TABLE_NAME FROM TABLES WHERE TABLE_SCHEMA='${DB_NAME}' AND TABLE_NAME LIKE '${LIKE_PATTERN}'" 2>&1)" \
        || onx_die 3 "Arama basarisiz"

    while IFS= read -r tname; do
        [[ -z "$tname" ]] && continue
        MATCHES_JSON+="${sep}{\"table\":$(printf '%s' "$tname" | jq -Rs '.')}"
        sep=","
    done <<< "$RESULT"
else
    # columns: tum sutunlar
    RESULT="$(mysql --defaults-extra-file="$_MYCNF_TMP" --batch --silent --raw information_schema -e \
        "SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM COLUMNS WHERE TABLE_SCHEMA='${DB_NAME}' AND COLUMN_NAME LIKE '${LIKE_PATTERN}' LIMIT 500" 2>&1)" \
        || onx_die 3 "Arama basarisiz"

    while IFS=$'\t' read -r tname cname dtype; do
        [[ -z "$tname" ]] && continue
        MATCHES_JSON+="${sep}{\"table\":$(printf '%s' "$tname" | jq -Rs '.'),\"column\":$(printf '%s' "$cname" | jq -Rs '.'),\"type\":$(printf '%s' "$dtype" | jq -Rs '.')}"
        sep=","
    done <<< "$RESULT"
fi

MATCHES_JSON+="]"

json_ok "{\"db_name\":\"${DB_NAME}\",\"pattern\":$(printf '%s' "$PATTERN" | jq -Rs '.'),\"scope\":\"${SCOPE}\",\"matches\":${MATCHES_JSON}}"
