-- ============================================
-- rioCata - Queries de Ejemplo
-- ============================================
-- Este archivo contiene queries de ejemplo
-- para explorar los datos de catación
-- ============================================

\echo '=========================================='
\echo 'Queries de Ejemplo - rioCata'
\echo '=========================================='
\echo ''

-- ============================================
-- QUERY 1: Listar todas las sesiones
-- ============================================
\echo '[QUERY 1] Sesiones de catación:'
SELECT
  codigo,
  fecha,
  nombre,
  created_at
FROM sesion
ORDER BY fecha DESC;

\echo ''

-- ============================================
-- QUERY 2: Participantes de una sesión
-- ============================================
\echo '[QUERY 2] Participantes de la sesión S-2025-10-17-01:'
SELECT
  u.nombre AS catador,
  u.email,
  sp.rol
FROM sesion s
JOIN sesion_participante sp ON sp.sesion_id = s.id
JOIN auth.users u ON u.id = sp.catador_id
WHERE s.codigo = 'S-2025-10-17-01';

\echo ''

-- ============================================
-- QUERY 3: Muestras de una sesión
-- ============================================
\echo '[QUERY 3] Muestras de la sesión S-2025-10-17-01:'
SELECT
  m.codigo AS muestra,
  m.posicion,
  COUNT(e.id) AS num_evaluaciones
FROM sesion s
JOIN muestra m ON m.sesion_id = s.id
LEFT JOIN evaluacion e ON e.muestra_id = m.id
WHERE s.codigo = 'S-2025-10-17-01'
GROUP BY m.id, m.codigo, m.posicion
ORDER BY m.posicion;

\echo ''

-- ============================================
-- QUERY 4: Top 5 evaluaciones por puntaje
-- ============================================
\echo '[QUERY 4] Top 5 evaluaciones por puntaje final:'
SELECT
  m.codigo AS muestra,
  u.nombre AS catador,
  e.puntaje_final,
  e.otras_notas
FROM evaluacion e
JOIN muestra m ON m.id = e.muestra_id
JOIN sesion_participante sp ON sp.id = e.sesion_participante_id
JOIN auth.users u ON u.id = sp.catador_id
ORDER BY e.puntaje_final DESC
LIMIT 5;

\echo ''

-- ============================================
-- QUERY 5: Evaluaciones con defectos
-- ============================================
\echo '[QUERY 5] Evaluaciones con defectos:'
SELECT
  m.codigo AS muestra,
  u.nombre AS catador,
  e.defecto,
  e.tazas_defectuosas,
  e.puntaje_final
FROM evaluacion e
JOIN muestra m ON m.id = e.muestra_id
JOIN sesion_participante sp ON sp.id = e.sesion_participante_id
JOIN auth.users u ON u.id = sp.catador_id
WHERE e.defecto IS NOT NULL
ORDER BY e.created_at;

\echo ''

-- ============================================
-- QUERY 6: Promedio de puntajes por muestra
-- ============================================
\echo '[QUERY 6] Promedio de puntajes por muestra:'
SELECT
  m.codigo AS muestra,
  COUNT(e.id) AS num_evaluaciones,
  ROUND(AVG(e.puntaje_final), 2) AS puntaje_promedio,
  MIN(e.puntaje_final) AS puntaje_minimo,
  MAX(e.puntaje_final) AS puntaje_maximo
FROM muestra m
LEFT JOIN evaluacion e ON e.muestra_id = m.id
GROUP BY m.id, m.codigo
ORDER BY puntaje_promedio DESC NULLS LAST;

\echo ''

-- ============================================
-- QUERY 7: Promedios de parámetros afectivos por muestra
-- ============================================
\echo '[QUERY 7] Promedios de parámetros afectivos por muestra:'
SELECT
  m.codigo AS muestra,
  ROUND(AVG((e.intensidades->'fragancia'->>'afectiva')::int), 2) AS fragancia,
  ROUND(AVG((e.intensidades->'aroma'->>'afectiva')::int), 2) AS aroma,
  ROUND(AVG((e.intensidades->'sabor'->>'afectiva')::int), 2) AS sabor,
  ROUND(AVG((e.intensidades->'acidez'->>'afectiva')::int), 2) AS acidez,
  ROUND(AVG((e.intensidades->'dulzor'->>'afectiva')::int), 2) AS dulzor
FROM muestra m
JOIN evaluacion e ON e.muestra_id = m.id
GROUP BY m.id, m.codigo
ORDER BY m.codigo;

\echo ''

-- ============================================
-- QUERY 8: Evaluaciones con tazas no uniformes
-- ============================================
\echo '[QUERY 8] Evaluaciones con tazas no uniformes:'
SELECT
  m.codigo AS muestra,
  u.nombre AS catador,
  e.tazas_no_uniformes,
  e.puntaje_final
FROM evaluacion e
JOIN muestra m ON m.id = e.muestra_id
JOIN sesion_participante sp ON sp.id = e.sesion_participante_id
JOIN auth.users u ON u.id = sp.catador_id
WHERE array_length(e.tazas_no_uniformes, 1) > 0
ORDER BY array_length(e.tazas_no_uniformes, 1) DESC;

\echo ''

-- ============================================
-- QUERY 9: Notas de fragancia/aroma más comunes
-- ============================================
\echo '[QUERY 9] Categorías de fragancia/aroma más frecuentes:'
SELECT
  nota->>'categoria' AS categoria,
  COUNT(*) AS frecuencia
FROM evaluacion e,
     jsonb_array_elements(e.fragancia_aroma_notas) AS nota
GROUP BY nota->>'categoria'
ORDER BY frecuencia DESC;

\echo ''

-- ============================================
-- QUERY 10: Notas de sabor más comunes
-- ============================================
\echo '[QUERY 10] Categorías de sabor más frecuentes:'
SELECT
  nota->>'categoria' AS categoria,
  COUNT(*) AS frecuencia
FROM evaluacion e,
     jsonb_array_elements(e.sabor_notas) AS nota
GROUP BY nota->>'categoria'
ORDER BY frecuencia DESC;

\echo ''

-- ============================================
-- QUERY 11: Gustos predominantes más comunes
-- ============================================
\echo '[QUERY 11] Gustos predominantes más frecuentes:'
SELECT
  UNNEST(gustos_predominantes) AS gusto,
  COUNT(*) AS frecuencia
FROM evaluacion
GROUP BY gusto
ORDER BY frecuencia DESC;

\echo ''

-- ============================================
-- QUERY 12: Sensaciones en boca más comunes
-- ============================================
\echo '[QUERY 12] Sensaciones en boca más frecuentes:'
SELECT
  UNNEST(sensacion_en_boca) AS sensacion,
  COUNT(*) AS frecuencia
FROM evaluacion
GROUP BY sensacion
ORDER BY frecuencia DESC;

\echo ''

-- ============================================
-- QUERY 13: Comparación de catadores
-- ============================================
\echo '[QUERY 13] Estadísticas por catador:'
SELECT
  u.nombre AS catador,
  COUNT(e.id) AS num_evaluaciones,
  ROUND(AVG(e.puntaje_final), 2) AS puntaje_promedio,
  MIN(e.puntaje_final) AS puntaje_minimo,
  MAX(e.puntaje_final) AS puntaje_maximo
FROM auth.users u
JOIN sesion_participante sp ON sp.catador_id = u.id
LEFT JOIN evaluacion e ON e.sesion_participante_id = sp.id
GROUP BY u.id, u.nombre
ORDER BY puntaje_promedio DESC;

\echo ''

-- ============================================
-- QUERY 14: Usando función auxiliar get_top_muestras
-- ============================================
\echo '[QUERY 14] Top 3 muestras usando función auxiliar:'
SELECT * FROM get_top_muestras('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 3);

\echo ''

-- ============================================
-- QUERY 15: Evaluaciones con alta acidez (>= 8)
-- ============================================
\echo '[QUERY 15] Evaluaciones con acidez afectiva >= 8:'
SELECT
  m.codigo AS muestra,
  u.nombre AS catador,
  (e.intensidades->'acidez'->>'afectiva')::int AS acidez_afectiva,
  e.puntaje_final
FROM evaluacion e
JOIN muestra m ON m.id = e.muestra_id
JOIN sesion_participante sp ON sp.id = e.sesion_participante_id
JOIN auth.users u ON u.id = sp.catador_id
WHERE ((e.intensidades->'acidez'->>'afectiva')::int) >= 8
ORDER BY acidez_afectiva DESC;

\echo ''

-- ============================================
-- QUERY 16: Búsqueda de texto en otras_notas
-- ============================================
\echo '[QUERY 16] Evaluaciones que mencionan "balanceado" en otras_notas:'
SELECT
  m.codigo AS muestra,
  u.nombre AS catador,
  e.puntaje_final,
  SUBSTRING(e.otras_notas, 1, 80) AS nota_preview
FROM evaluacion e
JOIN muestra m ON m.id = e.muestra_id
JOIN sesion_participante sp ON sp.id = e.sesion_participante_id
JOIN auth.users u ON u.id = sp.catador_id
WHERE to_tsvector('spanish', COALESCE(e.otras_notas, '')) @@ to_tsquery('spanish', 'balanceado')
ORDER BY e.puntaje_final DESC;

\echo ''

-- ============================================
-- QUERY 17: Detalle completo de una evaluación
-- ============================================
\echo '[QUERY 17] Detalle completo de la mejor evaluación:'
SELECT
  s.nombre AS sesion,
  s.fecha,
  m.codigo AS muestra,
  u.nombre AS catador,
  u.email,
  e.puntaje_final,
  jsonb_pretty(e.intensidades) AS intensidades,
  jsonb_pretty(e.fragancia_aroma_notas) AS fragancia_aroma,
  jsonb_pretty(e.sabor_notas) AS sabor,
  e.tazas_no_uniformes,
  e.tazas_defectuosas,
  e.sensacion_en_boca,
  e.gustos_predominantes,
  e.defecto,
  e.otras_notas
FROM evaluacion e
JOIN muestra m ON m.id = e.muestra_id
JOIN sesion s ON s.id = m.sesion_id
JOIN sesion_participante sp ON sp.id = e.sesion_participante_id
JOIN auth.users u ON u.id = sp.catador_id
ORDER BY e.puntaje_final DESC
LIMIT 1;

\echo ''
\echo '=========================================='
\echo 'Fin de queries de ejemplo'
\echo '=========================================='
