-- Migración: Agregar sistema de auditoría para edición de inspecciones
-- Fecha: 2025-11-25
-- Descripción: Crea tabla de auditoría para rastrear todos los cambios en inspecciones y respuestas

-- Crear tabla de auditoría
CREATE TABLE IF NOT EXISTS inspection_audit_log (
    id SERIAL PRIMARY KEY,
    inspection_id INTEGER NOT NULL REFERENCES inspections(id) ON DELETE CASCADE,
    answer_id INTEGER REFERENCES answers(id) ON DELETE CASCADE,
    user_id INTEGER NOT NULL REFERENCES users(id),
    action VARCHAR(50) NOT NULL,  -- created, updated, deleted, status_changed
    entity_type VARCHAR(50) NOT NULL,  -- inspection, answer
    field_name VARCHAR(100),  -- Campo modificado
    old_value TEXT,  -- Valor anterior
    new_value TEXT,  -- Valor nuevo
    comment TEXT,  -- Comentario del cambio
    created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);

-- Crear índices para mejorar rendimiento
CREATE INDEX idx_audit_log_inspection ON inspection_audit_log(inspection_id);
CREATE INDEX idx_audit_log_answer ON inspection_audit_log(answer_id);
CREATE INDEX idx_audit_log_user ON inspection_audit_log(user_id);
CREATE INDEX idx_audit_log_created_at ON inspection_audit_log(created_at DESC);

-- Comentarios para documentación
COMMENT ON TABLE inspection_audit_log IS 'Registro de auditoría de cambios en inspecciones y respuestas. Registra quién, cuándo y qué cambió.';
COMMENT ON COLUMN inspection_audit_log.action IS 'Tipo de acción: created, updated, deleted, status_changed';
COMMENT ON COLUMN inspection_audit_log.entity_type IS 'Tipo de entidad modificada: inspection, answer';
COMMENT ON COLUMN inspection_audit_log.field_name IS 'Nombre del campo que fue modificado';
COMMENT ON COLUMN inspection_audit_log.old_value IS 'Valor anterior del campo';
COMMENT ON COLUMN inspection_audit_log.new_value IS 'Valor nuevo del campo';
COMMENT ON COLUMN inspection_audit_log.comment IS 'Comentario del administrador sobre por qué realizó el cambio';

-- Verificar que la migración se ejecutó correctamente
SELECT 'Tabla inspection_audit_log creada exitosamente' AS status;

-- Opcional: Ver estructura de la tabla
\d inspection_audit_log
