-- Falukant: Geldbewegungen aus falukant_log.moneyflow (jede Zeile = ein Aufruf von
-- falukant_data.update_money → activity-String wie im Backend übergeben).
--
-- Typische activity-Werte (siehe falukantService.js → updateFalukantUserMoney):
--   Wirtschaft: Production cost; Product sale (net); Sell all products (net);
--     Steueranteil Region (Verkauf); Sales tax (…); Buy/Sell storage (type: …)
--   Transport/Fahrzeuge: transport; build_vehicles; buy_vehicles; repair_vehicle; repair_all_vehicles
--   Filiale: create_branch
--   Haus: housebuy; servants_hired; household_order; renovation_*; renovation_all
--   Soziales: marriage_gift; Marriage cost; Gift cost; partyOrder; Baptism; Reputation action: …
--   Bildung: learnAll; learnItem:<productId>
--   Sonst: new nobility title; health.<aktivität>; credit taken (Kredit = positiver change_value)
--
-- Platzhalter (ersetzt durch scripts/falukant-moneyflow-report.mjs):
--   __DIAG_DAYS__        → positive Ganzzahl (Tage zurück)
--   __DIAG_USER_FILTER__ → leer ODER " AND m.falukant_user_id = <id>"
--
-- Manuell in psql: __DIAG_DAYS__ durch z. B. 30 ersetzen, __DIAG_USER_FILTER__ leer lassen.

SELECT
  m.activity,
  COUNT(*)::bigint AS n,
  ROUND(SUM(m.change_value)::numeric, 2) AS sum_change,
  ROUND(SUM(CASE WHEN m.change_value < 0 THEN -m.change_value ELSE 0 END)::numeric, 2) AS total_outflow,
  ROUND(SUM(CASE WHEN m.change_value > 0 THEN m.change_value ELSE 0 END)::numeric, 2) AS total_inflow,
  ROUND(AVG(m.change_value)::numeric, 4) AS avg_change
FROM falukant_log.moneyflow m
WHERE m."time" >= NOW() - (INTERVAL '1 day' * __DIAG_DAYS__)
__DIAG_USER_FILTER__
GROUP BY m.activity
ORDER BY sum_change ASC NULLS LAST;
