from src.assets.snowflake.agg.rolling_wau.assets import rolling_wau
from src.assets.snowflake.dim.assets import agg_user_daily_spine, user_session_state, agg_user_platform_daily
from src.assets.snowflake.dim.sensors import user_session_state_new_data_sensor, dim_user_downstream_tasks_sensor, agg_user_platform_daily_new_data_sensor
from src.assets.snowflake.fact.fact_hook_play.assets import fact_hook_play, stg_android_hook_play, stg_ios_hook_play, stg_web_hook_play
from src.assets.snowflake.fact.play.assets import stg_web_play, stg_ios_play, stg_ios_legacy_play, stg_android_play, fact_play
from src.assets.snowflake.fact.studio_play.assets import fact_studio_play
from src.assets.snowflake.dim.hook.assets import dim_hook
from src.assets.snowflake.dim.user.assets import dim_user
from src.assets.snowflake.session.hook_session.assets import stg_hook_session_backend_events, stg_hook_session_segment_events, hook_session
from src.assets.snowflake.recommendation.rec_run.assets import rec_run
from src.assets.snowflake.recommendation.hook.rec_hook_hashtags.assets import rec_hook_hashtags
from src.assets.snowflake.redis.clip.assets import self_listening_clips
from src.assets.snowflake.raw_table.rds.clip import clip
from src.assets.snowflake.resources import snowflake
from .stripe_disputes_monitor import StripeDisputesMonitor
from src.assets.snowflake.agg.agg_play_info_hourly_v0.assets import agg_play_info_hourly_v0_insert
from src.assets.snowflake.agg.ml_song_summary_info_hourly.assets import ml_song_summary_info_hourly_insert
from src.assets.snowflake.genre.assets import genre_data, clip_genre

# Register all Snowflake assets here
CUSTOM_SNOWFLAKE_OBJECTS = [
    StripeDisputesMonitor(),
]

SNOWFLAKE_ASSETS = [
    stg_web_hook_play,
    stg_ios_hook_play,
    stg_android_hook_play,
    fact_hook_play,
    user_session_state,
    dim_user,
    dim_hook,
    agg_user_daily_spine,
    agg_user_platform_daily,
    rolling_wau,
    clip,
    rec_run,  # Add new rec_run asset
    rec_hook_hashtags,  # Hook hashtags extracted from captions
    stg_hook_session_backend_events,
    stg_hook_session_segment_events,
    hook_session,
    fact_studio_play,
    stg_web_play,
    stg_ios_play,
    stg_ios_legacy_play,
    stg_android_play,
    fact_play,
    self_listening_clips,
    agg_play_info_hourly_v0_insert,  # Aggregation asset
    ml_song_summary_info_hourly_insert,  # ML song summary aggregation
    genre_data,  # Static genre reference table
    clip_genre,  # Static clip-genre mapping table
]

SNOWFLAKE_RESOURCES = [
    snowflake,
]

SNOWFLAKE_SENSORS = [
    dim_user_downstream_tasks_sensor,
    user_session_state_new_data_sensor,
    agg_user_platform_daily_new_data_sensor,
]

# When we export the lists of assets, jobs, and schedules, the autoloader in definitions.py will pick them up
assets = [snowflake.asset for snowflake in CUSTOM_SNOWFLAKE_OBJECTS] + SNOWFLAKE_ASSETS
jobs = [snowflake.job for snowflake in CUSTOM_SNOWFLAKE_OBJECTS if snowflake.job]
schedules = [snowflake.schedule_def for snowflake in CUSTOM_SNOWFLAKE_OBJECTS if snowflake.schedule_def]
resources = SNOWFLAKE_RESOURCES
sensors = SNOWFLAKE_SENSORS

__all__ = ["assets", "jobs", "schedules", "resources", "sensors"]
