#!/bin/bash
set -uo pipefail
PASS=0
FAIL=0

check() {
  if [ "$1" = "$2" ]; then PASS=$((PASS+1)); echo "PASS: $3 (got: $1)";
  else FAIL=$((FAIL+1)); echo "FAIL: $3 -- expected [$2] got [$1]"; fi
}
contains() {
  if echo "$1" | grep -q "$2"; then PASS=$((PASS+1)); echo "PASS: $3";
  else FAIL=$((FAIL+1)); echo "FAIL: $3 -- did not find '$2'"; fi
}

echo "=== Setup ==="
service mariadb start 2>&1 | tail -1
sleep 2
mysql -u root -e "DROP DATABASE IF EXISTS fete; CREATE DATABASE fete;"
mysql -u root fete < /home/claude/fete/database/schema.sql
mysql -u root -e "CREATE USER IF NOT EXISTS 'fete_user'@'127.0.0.1' IDENTIFIED BY 'testpass123'; GRANT ALL PRIVILEGES ON fete.* TO 'fete_user'@'127.0.0.1'; FLUSH PRIVILEGES;"
mysql -u root fete -e "INSERT INTO users (id, role, full_name, email, password_hash) VALUES (1, 'host', 'Host A', 'hosta@example.com', '$(php -r "echo password_hash('password123', PASSWORD_DEFAULT);")');"
mysql -u root fete -e "INSERT INTO users (id, role, full_name, email, password_hash, referral_code) VALUES (2, 'affiliate', 'Planner P', 'planner@example.com', '$(php -r "echo password_hash('password123', PASSWORD_DEFAULT);")', 'PLANP1');"
mysql -u root fete -e "INSERT INTO users (id, role, full_name, email, password_hash) VALUES (3, 'admin', 'Admin', 'admin@example.com', '$(php -r "echo password_hash('password123', PASSWORD_DEFAULT);")');"
mysql -u root fete -e "INSERT INTO events (id, host_id, referring_affiliate_id, name, event_type, event_date, slug, status) VALUES (1, 1, 2, 'Referred Wedding', 'wedding', '2026-12-01', 'referred-wedding', 'live');"

cd /home/claude/fete/public
php -S 127.0.0.1:8000 > /tmp/php-server-p5.log 2>&1 &
SERVER_PID=$!
sleep 2
BASE="http://127.0.0.1:8000"

login() {
  local email=$1 jar=$2
  local GET_RESP=$(curl -s -c "$jar" "$BASE/login.php")
  local CSRF=$(echo "$GET_RESP" | grep -o 'name="csrf_token" value="[^"]*"' | head -1 | sed 's/.*value="//;s/"//')
  curl -s -b "$jar" -c "$jar" --data-urlencode "csrf_token=$CSRF" --data-urlencode "email=$email" --data-urlencode "password=password123" "$BASE/login.php" > /dev/null
}

echo "=== 1. Admin can view and update commission settings ==="
login "admin@example.com" /tmp/cj_admin.txt
SETTINGS_PAGE=$(curl -s -b /tmp/cj_admin.txt "$BASE/admin/settings.php")
contains "$SETTINGS_PAGE" "percentage" "settings page shows default percentage model"
CSRF_S=$(echo "$SETTINGS_PAGE" | grep -o 'name="csrf_token" value="[^"]*"' | head -1 | sed 's/.*value="//;s/"//')

SAVE_RESP=$(curl -s -b /tmp/cj_admin.txt \
  --data-urlencode "csrf_token=$CSRF_S" --data-urlencode "commission_model=percentage" \
  --data-urlencode "commission_rate=10" --data-urlencode "commission_flat_amount=0" \
  "$BASE/admin/settings.php")
contains "$SAVE_RESP" "Saved" "settings save confirms success"

DB_RATE=$(mysql -u root fete -N -e "SELECT setting_value FROM admin_settings WHERE setting_key='commission_rate';")
check "$DB_RATE" "10" "commission rate persisted to DB as 10"

echo "=== 2. Validation: percentage over 100 rejected ==="
BAD_RATE=$(curl -s -b /tmp/cj_admin.txt \
  --data-urlencode "csrf_token=$CSRF_S" --data-urlencode "commission_model=percentage" \
  --data-urlencode "commission_rate=150" --data-urlencode "commission_flat_amount=0" \
  "$BASE/admin/settings.php")
contains "$BAD_RATE" "between 0 and 100" "over-100 percentage rejected"
DB_RATE_UNCHANGED=$(mysql -u root fete -N -e "SELECT setting_value FROM admin_settings WHERE setting_key='commission_rate';")
check "$DB_RATE_UNCHANGED" "10" "rejected save does not change the stored rate"

echo "=== 3. Non-admin cannot reach settings page ==="
login "hosta@example.com" /tmp/cj_hosta.txt
HOST_TRY_SETTINGS=$(curl -s -o /dev/null -w "%{http_code}" -b /tmp/cj_hosta.txt "$BASE/admin/settings.php")
check "$HOST_TRY_SETTINGS" "403" "host cannot access admin settings page"

echo "=== 4. Simulate a successful donation on the referred event, confirm commission appears everywhere ==="
mysql -u root fete -e "INSERT INTO donations (event_id, donor_name, amount, currency, amount_in_base, flutterwave_tx_ref, status) VALUES (1, 'Efua', 500.00, 'GHS', 500.00, 'FETE-P5-1', 'pending');"
php -r "
require '/home/claude/fete/app/includes/db.php';
require '/home/claude/fete/app/includes/functions.php';
require '/home/claude/fete/app/includes/currency.php';
require '/home/claude/fete/app/includes/flutterwave.php';
require '/home/claude/fete/app/includes/commissions.php';
require '/home/claude/fete/app/includes/donations.php';
confirm_donation_from_verified_transaction(['tx_ref'=>'FETE-P5-1','amount'=>500.00,'currency'=>'GHS','status'=>'successful','id'=>'FLWP5']);
"
COMMISSION_AMOUNT=$(mysql -u root fete -N -e "SELECT commission_amount FROM affiliate_commissions WHERE donation_id=(SELECT id FROM donations WHERE flutterwave_tx_ref='FETE-P5-1');")
check "$COMMISSION_AMOUNT" "50.00" "10% of GHS 500 correctly recorded as GHS 50.00 commission"

login "planner@example.com" /tmp/cj_planner.txt
AFF_DASH=$(curl -s -b /tmp/cj_planner.txt "$BASE/affiliate/dashboard.php")
contains "$AFF_DASH" "GHS 50.00" "affiliate dashboard shows the earned commission"
contains "$AFF_DASH" "Referred Wedding" "affiliate dashboard's recent commissions lists the correct event"

HOST_VIEW=$(curl -s -b /tmp/cj_hosta.txt "$BASE/host/event-view.php?id=1")
contains "$HOST_VIEW" "Referred by Planner P" "host event-view shows which planner referred the event"
contains "$HOST_VIEW" "GHS 50.00" "host event-view shows commission earned by the planner"

echo ""
echo "=================================="
echo "RESULTS: $PASS passed, $FAIL failed"
echo "=================================="
kill $SERVER_PID 2>/dev/null
