"""
CloudSQL helper for import_data feature.
Uses same env as automation: POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB, INSTANCE_NAME, GCP_PROJECT.
"""
import os
import logging
from connectors.cloudSQL.cloudsql import CloudSQL

logger = logging.getLogger(__name__)

_ZONE = os.environ.get("POSTGRES_ZONE", "asia-southeast1")
_INSTANCE = os.environ.get("INSTANCE_NAME")
_USER = os.environ.get("POSTGRES_USER")
_PASSWORD = os.environ.get("POSTGRES_PASSWORD")
_DB = os.environ.get("POSTGRES_DB")

_engine = None


def get_engine():
    """Return CloudSQL engine, creating it if needed."""
    global _engine
    if _engine is None:
        if not all([_INSTANCE, _USER, _PASSWORD, _DB]):
            raise RuntimeError(
                "Set POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB, INSTANCE_NAME for import_data"
            )
        csql = CloudSQL(_ZONE, _INSTANCE)
        _engine = csql.create_engine(_USER, _PASSWORD, _DB)
    return _engine


def get_cloudsql():
    """Return a CloudSQL instance with engine already created (for query/insert_dataframe)."""
    if not all([_INSTANCE, _USER, _PASSWORD, _DB]):
        raise RuntimeError(
            "Set POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB, INSTANCE_NAME for import_data"
        )
    csql = CloudSQL(_ZONE, _INSTANCE)
    csql.create_engine(_USER, _PASSWORD, _DB)
    return csql
