-- Migration: Support pour History Pagination, Message Search, et Offline Sync
-- Création: 2025-12-05
-- Version: 1.0.0
-- Description: Ajoute les index nécessaires pour la pagination, recherche et synchronisation

-- ================================================================
-- INDEX POUR PAGINATION (HISTORY)
-- ================================================================

-- Index composite pour la pagination efficace par conversation et date
-- Permet les requêtes ORDER BY created_at avec WHERE conversation_id
CREATE INDEX IF NOT EXISTS idx_messages_conv_created_at 
ON messages(conversation_id, created_at DESC);

-- Index pour les requêtes avec filtre is_deleted (pour exclure les messages supprimés)
CREATE INDEX IF NOT EXISTS idx_messages_conv_created_not_deleted 
ON messages(conversation_id, created_at DESC) 
WHERE is_deleted = false;

-- ================================================================
-- INDEX POUR RECHERCHE TEXTUELLE
-- ================================================================

-- Extension pour recherche trigram (recherche partielle efficace)
CREATE EXTENSION IF NOT EXISTS pg_trgm;

-- Index GIN trigram pour recherche ILIKE performante sur content
CREATE INDEX IF NOT EXISTS idx_messages_content_trgm 
ON messages USING GIN(content gin_trgm_ops);

-- Index pour recherche avec filtre conversation_id + content
CREATE INDEX IF NOT EXISTS idx_messages_conv_content_trgm 
ON messages USING GIN(conversation_id, content gin_trgm_ops);

-- ================================================================
-- INDEX POUR SYNC OFFLINE
-- ================================================================

-- Index pour les requêtes WHERE created_at > timestamp (sync depuis)
CREATE INDEX IF NOT EXISTS idx_messages_conv_created_sync 
ON messages(conversation_id, created_at ASC) 
WHERE is_deleted = false;

-- Index pour les requêtes WHERE updated_at > timestamp (pour les edits)
CREATE INDEX IF NOT EXISTS idx_messages_conv_updated_sync 
ON messages(conversation_id, updated_at ASC) 
WHERE is_deleted = false;

-- ================================================================
-- COMMENTAIRES POUR DOCUMENTATION
-- ================================================================

COMMENT ON INDEX idx_messages_conv_created_at IS 'Index pour pagination efficace de l''historique par conversation';
COMMENT ON INDEX idx_messages_conv_created_not_deleted IS 'Index pour pagination en excluant les messages supprimés';
COMMENT ON INDEX idx_messages_content_trgm IS 'Index GIN trigram pour recherche textuelle performante sur le contenu';
COMMENT ON INDEX idx_messages_conv_content_trgm IS 'Index pour recherche textuelle par conversation';
COMMENT ON INDEX idx_messages_conv_created_sync IS 'Index pour synchronisation offline (messages depuis timestamp)';
COMMENT ON INDEX idx_messages_conv_updated_sync IS 'Index pour synchronisation offline (updates depuis timestamp)';

