-- =====================================================
-- INVESTMENT SCHEMA - RISK QUESTIONNAIRE TABLE
-- =====================================================
-- Description: Risk assessment questionnaire (15 questions)
-- Schema: investment
-- Author: Database Agent
-- Date: 2025-12-06
-- =====================================================

CREATE TABLE investment.risk_questionnaire (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),

  -- Usuario
  user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,

  -- Respuestas (15 preguntas)
  responses JSONB NOT NULL, -- [{question_id, answer, score}]

  -- Resultado
  total_score INTEGER NOT NULL CHECK (total_score >= 0 AND total_score <= 100),
  calculated_profile investment.risk_profile NOT NULL,

  -- Recomendación de agente
  recommended_agent investment.trading_agent,

  -- Validez
  completed_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  expires_at TIMESTAMPTZ NOT NULL, -- Válido por 1 año
  -- Note: is_expired removed - compute dynamically as (expires_at < NOW())

  -- Metadata
  ip_address INET,
  user_agent TEXT,
  completion_time_seconds INTEGER, -- Tiempo que tardó en completar

  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);

-- Índices
CREATE INDEX idx_questionnaire_user ON investment.risk_questionnaire(user_id);
CREATE INDEX idx_questionnaire_profile ON investment.risk_questionnaire(calculated_profile);
-- Index for valid questionnaires (without time-based predicate for immutability)
CREATE INDEX idx_questionnaire_valid ON investment.risk_questionnaire(user_id, expires_at DESC);

-- Comentarios
COMMENT ON TABLE investment.risk_questionnaire IS 'Risk assessment questionnaire responses (valid for 1 year)';
COMMENT ON COLUMN investment.risk_questionnaire.responses IS 'Array of question responses with scores: [{question_id, answer, score}]';
COMMENT ON COLUMN investment.risk_questionnaire.total_score IS 'Sum of all question scores (0-100)';
COMMENT ON COLUMN investment.risk_questionnaire.calculated_profile IS 'Risk profile calculated from total_score';
COMMENT ON COLUMN investment.risk_questionnaire.recommended_agent IS 'Trading agent recommendation based on risk profile';
COMMENT ON COLUMN investment.risk_questionnaire.expires_at IS 'Questionnaire expires after 1 year, user must retake';

-- Ejemplo de estructura de responses JSONB:
COMMENT ON COLUMN investment.risk_questionnaire.responses IS
'Example: [
  {"question_id": "Q1", "answer": "A", "score": 5},
  {"question_id": "Q2", "answer": "B", "score": 10},
  ...
]
Scoring logic:
- Conservative (0-40): Atlas agent recommended
- Moderate (41-70): Orion agent recommended
- Aggressive (71-100): Nova agent recommended';
