-- ==========================================
-- SCRIPT DE BASE DE DATOS PARA SUPABASE
-- PROYECTO: Diagnóstico IA Empresarial (ASSEGURA AI)
-- ==========================================

-- 1. Crear la tabla principal de diagnósticos
CREATE TABLE IF NOT EXISTS diagnosticos (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    cliente_nombre VARCHAR(255) NOT NULL,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    fase_actual INT DEFAULT 1,
    estado VARCHAR(50) DEFAULT 'en_progreso', -- 'en_progreso' o 'completado'
    
    -- Datos estructurados por fase (JSONB para flexibilidad de datos)
    fase1_data JSONB DEFAULT '{}'::jsonb, -- Contacto inicial
    fase2_data JSONB DEFAULT '{}'::jsonb, -- Reunión de descubrimiento
    fase3_data JSONB DEFAULT '{}'::jsonb, -- Cuestionario diagnóstico
    fase4_data JSONB DEFAULT '[]'::jsonb, -- Mapeo de procesos (Lista)
    fase5_data JSONB DEFAULT '[]'::jsonb, -- Identificación de oportunidades IA (Lista)
    fase6_data JSONB DEFAULT '[]'::jsonb, -- Priorización (Lista evaluada)
    fase7_data JSONB DEFAULT '{}'::jsonb, -- Roadmap IA (30-60-90 días)
    fase8_data JSONB DEFAULT '{}'::jsonb, -- Informe Ejecutivo Final
    fase9_data JSONB DEFAULT '{}'::jsonb, -- Presentación de resultados
    fase10_data JSONB DEFAULT '{}'::jsonb -- Conversión comercial
);

-- 2. Habilitar el soporte de Row Level Security (RLS)
ALTER TABLE diagnosticos ENABLE ROW LEVEL SECURITY;

-- 3. Crear políticas de seguridad para permitir el acceso (Lectura/Escritura)
-- NOTA: Para un entorno de producción real, se recomienda restringir estas políticas
-- mediante autenticación (ej. auth.uid() = user_id).
-- Para facilitar las pruebas iniciales y la integración rápida, estas políticas permiten el acceso público:

CREATE POLICY "Permitir lectura de diagnósticos" 
ON diagnosticos FOR SELECT 
USING (true);

CREATE POLICY "Permitir creación de diagnósticos" 
ON diagnosticos FOR INSERT 
WITH CHECK (true);

CREATE POLICY "Permitir actualización de diagnósticos" 
ON diagnosticos FOR UPDATE 
USING (true);

CREATE POLICY "Permitir eliminación de diagnósticos" 
ON diagnosticos FOR DELETE 
USING (true);

-- 4. Crear una función para actualizar automáticamente la columna 'updated_at'
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
    NEW.updated_at = NOW();
    RETURN NEW;
END;
$$ language 'plpgsql';

CREATE TRIGGER update_diagnosticos_updated_at
    BEFORE UPDATE ON diagnosticos
    FOR EACH ROW
    EXECUTE FUNCTION update_updated_at_column();
