#!/bin/bash
# =============================================================================
# SQL Server 2017 Express - Low RAM Edition
# Entrypoint que inicia SQL Server y aplica optimizaciones automáticamente
# =============================================================================

set -e

# Colores para output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

log_info()  { echo -e "${GREEN}[LOWRAM]${NC} $1"; }
log_warn()  { echo -e "${YELLOW}[LOWRAM]${NC} $1"; }
log_error() { echo -e "${RED}[LOWRAM]${NC} $1"; }

# Validar que se proporcionó contraseña
if [ -z "$MSSQL_SA_PASSWORD" ]; then
    log_error "ERROR: Variable MSSQL_SA_PASSWORD es requerida"
    log_error ""
    log_error "Uso correcto:"
    log_error "  docker run -e MSSQL_SA_PASSWORD=TuPassword123! ..."
    log_error ""
    log_error "Requisitos del password:"
    log_error "  - Mínimo 8 caracteres"
    log_error "  - Al menos una mayúscula"
    log_error "  - Al menos una minúscula"
    log_error "  - Al menos un número"
    log_error "  - Al menos un caracter especial (!@#\$%^&*)"
    exit 1
fi

# Función para aplicar optimizaciones
apply_optimizations() {
    log_info "Esperando que SQL Server esté listo..."

    for i in {1..60}; do
        if /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "$MSSQL_SA_PASSWORD" \
            -Q "SELECT 1" &>/dev/null; then
            log_info "SQL Server listo - Aplicando optimizaciones..."

            if /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "$MSSQL_SA_PASSWORD" \
                -i /opt/mssql/bin/optimize.sql 2>/dev/null; then
                log_info "============================================="
                log_info "SQL Server Low RAM Edition - LISTO"
                log_info "============================================="
                log_info "Conexión: localhost,1433"
                log_info "Usuario:  sa"
                log_info "RAM:      ~380MB (optimizado)"
                log_info "============================================="
            else
                log_warn "Optimizaciones parcialmente aplicadas"
            fi
            return 0
        fi
        sleep 2
    done

    log_warn "Timeout esperando SQL Server - optimizaciones no aplicadas"
    return 1
}

# Mostrar configuración
log_info "============================================="
log_info "SQL Server 2017 Express - Low RAM Edition"
log_info "============================================="
log_info "Edición:        ${MSSQL_PID:-Express}"
log_info "Memoria límite: ${MSSQL_MEMORY_LIMIT_MB:-340} MB"
log_info "============================================="

# Aplicar optimizaciones en background después de que SQL Server inicie
apply_optimizations &

# Iniciar SQL Server (foreground)
exec /opt/mssql/bin/sqlservr
