#!/bin/bash
# Smoke test — full Phase 1 E2E flow

API=http://localhost:3000/api/v1
set -e

echo "=== 1) Login Syndic ==="
TOKEN=$(curl -s -X POST $API/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"syndic@atlas.ma","password":"Syndic@12345"}' \
  | node -e "let d='';process.stdin.on('data',c=>d+=c).on('end',()=>console.log(JSON.parse(d).accessToken))")
echo "  ✓ Access token acquired"

AUTH="Authorization: Bearer $TOKEN"

echo "=== 2) Fetch complex tree ==="
COMPLEX_ID=$(curl -s $API/complexes -H "$AUTH" | node -e "let d='';process.stdin.on('data',c=>d+=c).on('end',()=>console.log(JSON.parse(d)[0].id))")
echo "  Complex ID: $COMPLEX_ID"

echo "=== 3) Get repartition keys ==="
KEYS=$(curl -s $API/complexes/$COMPLEX_ID -H "$AUTH")
GEN_KEY=$(echo $KEYS | node -e "let d='';process.stdin.on('data',c=>d+=c).on('end',()=>console.log(JSON.parse(d).repartitionKeys.find(k=>k.code==='GEN').id))")
echo "  GEN key: $GEN_KEY"

echo "=== 4) Get fiscal year ==="
FY_ID=$(curl -s "$API/fiscal-years?complexId=$COMPLEX_ID" -H "$AUTH" | node -e "let d='';process.stdin.on('data',c=>d+=c).on('end',()=>console.log(JSON.parse(d)[0].id))")
echo "  FY ID: $FY_ID"

echo "=== 5) Generate fund call (12 000 MAD on general charges) ==="
FC=$(curl -s -X POST $API/fund-calls \
  -H "$AUTH" -H "Content-Type: application/json" \
  -d "{\"complexId\":\"$COMPLEX_ID\",\"fiscalYearId\":\"$FY_ID\",\"label\":\"Test Q2\",\"period\":\"2026-Q2\",\"dueDate\":\"2026-06-30\",\"allocations\":[{\"repartitionKeyId\":\"$GEN_KEY\",\"amount\":12000}]}")
FC_ID=$(echo $FC | node -e "let d='';process.stdin.on('data',c=>d+=c).on('end',()=>console.log(JSON.parse(d).id))")
echo "  Fund call ID: $FC_ID"
echo $FC | node -e "let d='';process.stdin.on('data',c=>d+=c).on('end',()=>{const p=JSON.parse(d);console.log('  Total:',p.totalAmount,'MAD — Items:',p.itemsCount)})"

echo "=== 6) List fund call items (per-lot split) ==="
ITEMS=$(curl -s $API/fund-calls/$FC_ID -H "$AUTH")
echo $ITEMS | node -e "
let d='';process.stdin.on('data',c=>d+=c).on('end',()=>{
  const p=JSON.parse(d);
  p.items.forEach(i=>console.log('  Lot '+i.lot.lotNumber+' → '+i.amount+' MAD ['+i.status+']'));
})"
ITEM_ID=$(echo $ITEMS | node -e "let d='';process.stdin.on('data',c=>d+=c).on('end',()=>console.log(JSON.parse(d).items[0].id))")

echo "=== 7) Record cash payment on first item ==="
curl -s -X POST $API/fund-call-items/$ITEM_ID/payments \
  -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"amount":1714.29,"method":"CASH","reference":"CAISSE-001"}' \
  | node -e "let d='';process.stdin.on('data',c=>d+=c).on('end',()=>{const p=JSON.parse(d);console.log('  Payment '+p.id.substr(0,8)+' — '+p.status+' — '+p.amount+' MAD')})"

echo "=== 8) Dashboard ==="
curl -s $API/complexes/$COMPLEX_ID/dashboard -H "$AUTH" | node -e "
let d='';process.stdin.on('data',c=>d+=c).on('end',()=>{
  const p=JSON.parse(d);
  console.log('  Lots:',p.lotsCount,'| Residents:',p.residentsCount,'| Active fund calls:',p.activeFundCalls);
  console.log('  Finance: billed='+p.finance.totalBilled+' collected='+p.finance.totalCollected+' rate='+p.finance.collectionRate+'%');
})"

echo ""
echo "✅ All Phase 1 MVP flows work"
