
    5iK              	           d Z ddlZddlmZmZmZ ddlZddlm	Z	m
Z
 ddlmZ  ej                  d      Zded	ed
eeeef      fdZded	ed
eeeef      fdZdeeeef      ded
efdZy)z
Tier 2: Market / sportsbook sanity validation.

Cross-checks internal player-team mappings against market data.
Uses SGO API player props to confirm market presence.
    N)ListDictAny   )normalize_player_namenormalize_team_abbrev)
SourceTierzpub-integrityleaguerun_idreturnc                    | j                  t        j                  j                        }|j	                  d|f       |j                         }|j                          g }|D ]o  }|j                  |d   |d   t        |d   xs d      t        |j                  dd      xs d      |d|j                  dd      d	t        j                  |d

       q t        j                  dt        |       d|        |S )z
    Read rm_forecast_precomputed for PLAYER_PROP entries.
    These represent props that sportsbooks are actively offering.
    cursor_factorya  
        SELECT event_id, player_name, league, team_id, status,
               created_at
        FROM rm_forecast_precomputed
        WHERE LOWER(league) = LOWER(%s)
          AND forecast_type = 'PLAYER_PROP'
          AND date_et = (NOW() AT TIME ZONE 'America/New_York')::date
    event_idplayer_name team_idstatusACTIVErm_forecast_precomputed)
r   r   normalized_nameteamr
   	prop_typemarket_statussourcesource_tierr   [market] Ingested z market props for )cursorpsycopg2extrasRealDictCursorexecutefetchallcloseappendr   r   getr	   MARKETloginfolen)connr
   r   currowsresultsrows          M/var/www/html/rainmaker/backend/scripts/publishing_integrity/market_ingest.pyingest_market_propsr1      s    
 ++X__%C%C+
DCKK   <<>DIIKG J}-4S5G5M2N)#'')R*@*FBG WWXx8/%,,
 	 HH!#g,/A&JKN    c                    | j                  t        j                  j                        }|j	                  d|f       |j                         }|j                          g }|D ]  }|j                  d      xs i }|j                  dg       }t        |t              s;|D ]|  }	|	j                  dd      xs |	j                  dd      }
|
s,|j                  |d   |
t        |
      t        |j                  d	d      xs d      |d
t        j                  |d       ~  t        j!                  dt#        |       d|        |S )z
    Read player prop data from rm_events.prop_count and rm_team_props_cache.
    This tells us which players the sportsbooks are actively pricing.
    r   a   
        SELECT event_id, team, team_name, team_short, league, props_data, created_at
        FROM rm_team_props_cache
        WHERE LOWER(league) = LOWER(%s)
          AND DATE(created_at AT TIME ZONE 'America/New_York')
              = (NOW() AT TIME ZONE 'America/New_York')::date
    
props_dataplayers
playerNamer   playerr   r   rm_team_props_cache)r   r   r   r   r
   r   r   r   r   z. market-confirmed players from team props for )r   r   r    r!   r"   r#   r$   r&   
isinstancelistr%   r   r   r	   r'   r(   r)   r*   )r+   r
   r   r,   r-   r.   r/   r4   r5   ppnames              r0   ingest_market_from_sgo_oddsr=   8   s4   
 ++X__%C%C+
DCKK   <<>DIIKG WW\*0b
..B/gt$ lB/F15523FNN$'
O',+@+G 5cggfb6I6OR P"("7'1'8'8"(	$ 		$ HH!#g,/]^d]efgNr2   market_propsr   c                 T    t        |      }| D ]  }|j                  d      |k(  s y y)zBCheck if a player has an active market across any sportsbook data.r   TF)r   r&   )r>   r   normmps       r0   check_market_presencerB   `   s5     -D 66#$, r2   )__doc__loggingtypingr   r   r   psycopg2.extrasr   normalizationr   r   enumsr	   	getLoggerr(   strr1   r=   boolrB    r2   r0   <module>rM      s     " "  G g("c "3 "4S#X;O "J%c %3 %4SRUXCW %PT#s(^(< 3 SW r2   