#!/usr/bin/env bash
# Phase 5: Identity, Media & TMDb API Test
# Modules: 07_identity, 08_media, 09_tmdb
# Endpoints: 23

BASE="https://m5api.momentry.ddns.net"
API_KEY="muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69"
FILE_UUID="a6fb22eebefaef17e62af874997c5944"
IDENTITY_UUID="ccd2862fa5c84849b6f483929b1050ea"

PASS=0
FAIL=0
TOTAL=0

echo "============================================"
echo " Phase 5: Identity, Media & TMDb API Test"
echo " Base:    $BASE"
echo " File:    $FILE_UUID"
echo " Identity: $IDENTITY_UUID"
echo "============================================"
echo ""

test_api() {
    local method="$1" path="$2" body="$3" desc="$4"
    TOTAL=$((TOTAL+1))

    local tmpfile="/tmp/m5api_resp_${TOTAL}.json"
    local curl_args=(-s -o "$tmpfile" -w "\nHTTP:%{http_code}")
    curl_args+=(-X "$method")
    curl_args+=(-H "Content-Type: application/json")
    curl_args+=(-H "X-API-Key: $API_KEY")

    if [ -n "$body" ]; then
        curl_args+=(-d "$body")
    fi

    local result
    result=$(curl "${curl_args[@]}" "${BASE}${path}" 2>/dev/null)
    local code=$(echo "$result" | grep "HTTP:" | tr -d "HTTP:")
    local resp_body=$(echo "$result" | sed '/^HTTP:/d')
    local size=${#resp_body}

    if [ "$code" -ge 200 ] 2>/dev/null && [ "$code" -lt 400 ] 2>/dev/null; then
        PASS=$((PASS+1))
        printf "  ✅ %2d. %-5s %-55s → %s (%d B) — %s\n" "$TOTAL" "$method" "$path" "$code" "$size" "$desc"
    else
        FAIL=$((FAIL+1))
        printf "  ❌ %2d. %-5s %-55s → %s (%d B) — %s\n" "$TOTAL" "$method" "$path" "$code" "$size" "$desc"
        local preview
        preview=$(echo "$resp_body" | head -c 150)
        echo "      $preview"
    fi
}

echo "── Identity List ──"
test_api "GET" "/api/v1/identities?page=1&page_size=3" "" "List identities"
test_api "GET" "/api/v1/identity/$IDENTITY_UUID" "" "Get identity detail"
test_api "GET" "/api/v1/identity/$IDENTITY_UUID/files" "" "Get identity files"
test_api "GET" "/api/v1/identity/$IDENTITY_UUID/chunks" "" "Get identity chunks"
test_api "GET" "/api/v1/identity/$IDENTITY_UUID/faces" "" "Get identity faces"
test_api "GET" "/api/v1/identity/$IDENTITY_UUID/json" "" "Get identity JSON"

echo ""
echo "── Face Candidates ──"
test_api "GET" "/api/v1/faces/candidates?file_uuid=$FILE_UUID&page=1&page_size=3" "" "List face candidates"

echo ""
echo "── Identity Binding ──"
test_api "POST" "/api/v1/identity/$IDENTITY_UUID/bind" "{\"file_uuid\":\"$FILE_UUID\",\"face_id\":\"face_1\"}" "Bind identity"
test_api "POST" "/api/v1/identity/$IDENTITY_UUID/unbind" "{\"file_uuid\":\"$FILE_UUID\",\"face_id\":\"face_1\"}" "Unbind identity"
test_api "POST" "/api/v1/identity/$IDENTITY_UUID/mergeinto" "{\"into_uuid\":\"$IDENTITY_UUID\",\"keep_history\":false}" "Merge identities"

echo ""
echo "── TMDb ──"
test_api "GET" "/api/v1/resource/tmdb" "" "TMDb resource status"
test_api "POST" "/api/v1/resource/tmdb/check" "" "TMDb resource check"
test_api "POST" "/api/v1/agents/tmdb/prefetch" "{\"file_uuid\":\"$FILE_UUID\"}" "TMDb prefetch"
test_api "POST" "/api/v1/file/$FILE_UUID/tmdb-probe" "" "TMDb probe"

echo ""
echo "── Identity Agent ──"
# Match from photo requires multipart upload, skip for now
# test_api "POST" "/api/v1/agents/identity/match-from-photo" "" "Match from photo (multipart)"
# test_api "POST" "/api/v1/agents/identity/match-from-trace" "{\"file_uuid\":\"$FILE_UUID\",\"trace_id\":1,\"identity_uuid\":\"$IDENTITY_UUID\"}" "Match from trace (skip: tested on 3003)"

echo ""
echo "── 5W1H Agent ──"
test_api "POST" "/api/v1/agents/5w1h/analyze" "{\"file_uuid\":\"$FILE_UUID\"}" "5W1H analyze"
test_api "GET" "/api/v1/agents/5w1h/status?file_uuid=$FILE_UUID" "" "5W1H status"

echo ""
echo "── Trace ──"
test_api "POST" "/api/v1/file/$FILE_UUID/traces" "{\"min_faces\":1,\"page\":1,\"page_size\":3}" "List traces"
test_api "GET" "/api/v1/file/$FILE_UUID/trace/1/faces" "" "List trace faces"

echo ""
echo "── Media ──"
test_api "GET" "/api/v1/file/$FILE_UUID/video?start_time=60&end_time=65" "" "Stream video clip"
test_api "GET" "/api/v1/file/$FILE_UUID/thumbnail?frame=1000" "" "Extract thumbnail"
test_api "GET" "/api/v1/file/$FILE_UUID/clip?start_frame=1000&end_frame=1100" "" "Video clip by frame"

echo ""
echo "============================================"
echo " Total:  $TOTAL"
echo " Passed: $PASS ✅"
echo " Failed: $FAIL ❌"
echo "============================================"

if [ $FAIL -gt 0 ]; then
    echo "❌ Phase 5 FAILED"
    exit 1
else
    echo "✅ Phase 5 PASSED"
fi
