from dagster import EnvVar
from dagster_snowflake import SnowflakeResource
from src.utils.database import get_snowflake_private_key
from src.utils.snowflake.constants import Role, Warehouse

# If there is an EnvVar for private_key_path, use that. Otherwise, use private_key.
if EnvVar("SNOWFLAKE_PRIVATE_KEY_PATH").get_value():
    snowflake = SnowflakeResource(
        account=EnvVar("SNOWFLAKE_ACCOUNT"),
        user=EnvVar("SNOWFLAKE_ACCOUNT_USER"),
        private_key_path=EnvVar("SNOWFLAKE_PRIVATE_KEY_PATH"),
        database=EnvVar("SNOWFLAKE_DB"),
        schema=EnvVar("SNOWFLAKE_SCHEMA"),
        role=Role.ACCOUNTADMIN,
        warehouse=Warehouse.SMALL,  # Default warehouse, can be overridden at runtime
    )
else:
    snowflake = SnowflakeResource(
        account=EnvVar("SNOWFLAKE_ACCOUNT"),
        user=EnvVar("SNOWFLAKE_ACCOUNT_USER"),
        private_key=EnvVar("SNOWFLAKE_PRIVATE_KEY").get_value().replace("\\n", "\n"),
        database=EnvVar("SNOWFLAKE_DB"),
        schema=EnvVar("SNOWFLAKE_SCHEMA"),
        role=EnvVar("SNOWFLAKE_ACCOUNT_ROLE"),
        warehouse=Warehouse.SMALL,  # Default warehouse, can be overridden at runtime
    )

__all__ = ["snowflake"]
