import sys
import traceback

# Redirect all output to file as well as stdout
import io

log_lines = []

def log(msg):
    print(msg)
    log_lines.append(str(msg))

sys.path.append('E:/genesis-system/data/genesis-memory')
try:
    from elestio_config import PostgresConfig, RedisConfig, QdrantConfig
    log('PostgreSQL host: ' + PostgresConfig.get_connection_params().get('host', 'unknown'))
    log('Redis host: ' + RedisConfig().host)
    log('Qdrant url: ' + QdrantConfig().url)

    # Test PostgreSQL
    import psycopg2
    conn = psycopg2.connect(**PostgresConfig.get_connection_params())
    cur = conn.cursor()
    cur.execute('SELECT version()')
    log('PG_VERSION: ' + cur.fetchone()[0][:60])
    cur.execute("""SELECT table_schema, table_name FROM information_schema.tables
                   WHERE table_schema IN ('public','aiva_rlm','genesis')
                   ORDER BY table_schema, table_name""")
    tables = [(r[0], r[1]) for r in cur.fetchall()]
    log('TABLES_ALL: ' + str(tables))
    conn.close()
    log('PG: CONNECTED')

    # Test Redis
    import redis
    r = redis.Redis(host=RedisConfig().host, port=RedisConfig().port, password=RedisConfig().password, decode_responses=True)
    r.ping()
    info = r.info('keyspace')
    log('REDIS: CONNECTED, keyspace: ' + str(info))

    # Test Qdrant
    from qdrant_client import QdrantClient
    qc = QdrantClient(url=QdrantConfig().url, api_key=QdrantConfig().api_key)
    collections = qc.get_collections()
    log('QDRANT_COLLECTIONS: ' + str([c.name for c in collections.collections]))
    log('QDRANT: CONNECTED')

except Exception as e:
    log('ERROR: ' + str(e))
    log(traceback.format_exc())

finally:
    with open('E:/genesis-system/scripts/infra_test_output.txt', 'w') as f:
        f.write('\n'.join(log_lines))
    log('Output written to E:/genesis-system/scripts/infra_test_output.txt')
