
    XFi                    x    d Z ddlmZ ddlmZmZmZmZ ddlm	Z	 ddl
mZ eegeeeef      f   Z G d d      Zy)	u  SceneStillCheckpointLoader — 씬 스틸 동기화에 필요한 모든 체크포인트를 CheckpointBundle로 수집.

의존 체크포인트: scene_detail, scene_dependency, shot_dependency,
shot_validator, shot_selection, scene_director, shot_director,
scene_summary, shot_cinematography, scene_cinematography.

Pure 로직 — `_load_cp` callable만 주입받아 DB/settings 독립적.
    )annotations)AnyCallableDictOptional)is_cp_syncable)CheckpointBundlec                      e Zd ZddZddZy)SceneStillCheckpointLoaderc                    || _         y )N)_load_cp)selfload_cps     p/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/checkpoint_sync/scene_still_checkpoint_loader.py__init__z#SceneStillCheckpointLoader.__init__   s	        c                   t               }| j                  d      }t        |dg      |_        |j                  rF|j	                  d      xs i j	                  d      xs g |_        |j	                  d      dk(  |_        | j                  d      }|rV|j	                  di       j	                  dg       }t        |t              r|D ci c]  }t        |d         | c}n||_
        | j                  d	      }|rC|j	                  di       j	                  d      }|r||_        |j	                  d      d
k(  |_        | j                  d      }| j                  d      }	|r|j	                  di       j	                  d      ri }
|	rO|	j	                  di       j	                  d      r.|	d   d   D ]#  }t        |j	                  dg             |
|d   <   % |d   d   D ]}  }|d   }t        |j	                  dg             }||j                  |<   |
j	                  |      }|!|D ch c]  }|d   	 c}|j                  |<   ft        |      |j                  |<    | j                  d      }|r|j	                  di       j	                  d      r{|d   d   D ]p  }|j	                  d      }|j	                  dg       |j                   |<   |j	                  dg       |j"                  |<   |j	                  dg       |j$                  |<   r | j                  d      }|rn|j	                  di       j	                  d      rM|d   d   D ]B  }|d   }|j	                  dg       D ]&  }|j	                  dg       |j&                  ||d   f<   ( D | j                  d      }|r;|j	                  d      d
k(  r'|j	                  di       j	                  dg       |_        | j                  d      }|r.|j	                  di       j	                  d      r|d   d   |_        | j                  d      }|r;|j	                  d      d
k(  r'|j	                  di       j	                  dg       |_        |S c c}w c c}w )Nscene_detailscenesdatastatuspartialscene_dependencydependenciesscene_indexshot_dependency	completedshot_validatorshot_selectionselected_shot_indicesshots
shot_indexscene_directorpresent_entity_idsaudio_entity_idshallucination_entity_idsshot_directorvisible_entity_idsscene_summary	summariesshot_cinematographyscene_cinematography)r	   r   r   sd_completedgetr   
sd_partial
isinstanceliststrdep_map	shot_depsshot_dep_completedsetshot_info_by_sceneselected_flag_by_scenescene_director_vescene_director_audioscene_director_hallshot_director_ve_mapscene_summariesshot_cine_shotsscene_cine_scenes)r   bundlesd_cpdep_cp_dep_rawdshot_dep_cpdepsshot_cpsel_cpsel_mapsscsi	all_shotssel_indicesshdir_cpds_sishot_dir_cp
summary_cpshot_cine_cpcine_cps                           r   loadzSceneStillCheckpointLoader.load   sJ   !# n-,UXJ?"YYv.4"99(CIrFM!&8!4	!AF 12zz&"-11."EH h- 4<<8aQ}%&)8< N mm$56??62.22>BD#' (3(A[(PF% -- 01/0w{{62.228<&(G&**VR044X>1A03AEE:QSU4V0WGAm,- 2foh/& !45	09))"-%kk"o&T]8^T]bL9IT]8^F11"58;K8HF11"5 0 /0fjj,00:VnX.ff]+027KR0P((-3566:Lb3Q++C024&&9SUW2X**3/	 / mmO4;??626::8D!&)(3'&&"-BKM66,bLF//b6F0GH . 4 ]]?3
*..2kA%/^^FB%?%C%CKQS%TF" }}%:;L,,VR8<<WE%1&%9'%BF" -- 67w{{8,;'.{{62'>'B'B8R'PF$C =6 9_s   	Q.(Q3N)r   CheckpointLoaderFn)returnr	   )__name__
__module____qualname__r   rW    r   r   r   r      s     Ur   r   N)__doc__
__future__r   typingr   r   r   r   "app.services.checkpoint_sync._baser   3app.services.checkpoint_sync._scene_still_contractsr	   r2   rX   r   r]   r   r   <module>rc      sF    # 0 0 = PseXd38n%==> Y Yr   