
    G)i                        d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	 ddl
mZmZ dd	d	d	d
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 ddZddZy	)uY  H5. 사진 합성 카드 — 사용자 업로드 사진 배경 + Satori 한글 + frame.

용도: 회사 소식, 인터뷰.
배경: 사용자 업로드 사진 (file path).
텍스트: Satori 한글 + frame (100% 정확).

외부 API 호출 0건 — 사용자 사진 + Satori만 사용.

IDS Phase 1 §3.2.1 / §0.2 Hybrid Pattern Standard 준수.
    )annotations)Path   )build_background_layer_htmldefault_gradient)render_h5_procedural)KOREAN_FONT_STACKrender_html_to_png)i8  iF  N)sizedesign_tokensbackground_pathprompt_hintc          
         ~|\  }}t        |      }|j                  j                  dd       |xs i }	|#t        t        |            j	                         r	 t        | ||||t        |	            S )u  H5 사진 합성 카드를 렌더링한다.

    Args:
        title: 한글 헤드라인.
        body: 한글 본문 (인터뷰 인용/회사 소식 등).
        output_path: 출력 PNG 경로.
        size: (width, height) 픽셀.
        design_tokens: 디자인 토큰 dict (`frame_color`, `caption` 등).
        background_path: **필수** — 사용자 업로드 사진 경로.
        prompt_hint: H5에서 사용하지 않음 (시그니처 일관성용).

    Returns:
        저장된 PNG 경로.
    T)parentsexist_ok)widthheightr   )r   parentmkdirstrexistsr   dict)
titlebodyoutput_pathr   r   r   r   r   r   tokenss
             F/home/jay/workspace/skills/hybrid-image/patterns/h5_user_photo_card.pyrenderr      s    0 	ME6{#KTD9 bF"tC,@'A'H'H'J 	6l     c                  |xs i }t        |j                  dd            }t        |j                  dd            }	t        |j                  dd            }
t        |j                  dd            }t        |j                  d	d
            }d}|t        |      }|j                         r|}t	        |dz        }||z
  }t        |||t        d            }d}|rdt        |       d}dj                  g d| d| d| dt         d| d| d| d| d| d| d|	 dt        |        d|
 dt        |       d| d      }t        ||||      S )u=   Legacy Satori HTML render path. 보존용 (호출처 없음).frame_colorz#fafaf8title_colorz#0f1729
body_colorz#3a3f4ecaption accent_colorz#d4a853Ng333333?mono)r   r   fallback_gradientzT<div style="font-size:22px; color:#8a8f9c; margin-top:20px; letter-spacing:0.05em;">z</div>z7<div style="display:flex; flex-direction:column; width:zpx; height:zpx; background:z; font-family:zK; word-break:keep-all;"><div style="display:flex; position:relative; width:zpx;">z=</div><div style="display:flex; flex-direction:column; width:zpx; padding:64px; box-sizing:border-box; justify-content:center;"><div style="display:flex; width:60px; height:4px; background:zP; margin-bottom:24px;"></div><div style="font-size:54px; font-weight:700; color:z(; line-height:1.3; margin-bottom:18px;">z(</div><div style="font-size:30px; color:z; line-height:1.5;">z</div></div>)r   r   )r   getr   r   intr   r   _escjoinr	   r
   )r   r   r   r   r   r   r   r   r!   r"   r#   r$   r&   bg_resolved	candidatephoto_heighttext_heightphoto_layercaption_htmlhtmls                       r   _legacy_html_render_h5r4   B   ss     bFfjj	:;Kfjj	:;KVZZi89J&**Y+,Gvzz.)<=L  $K")	#K v|$L<'K-*62	K L88<WfN 		 	  		"	#)(	+	!]	#	 ))	*	
 	
 #	
 $0.	
 16	 -		 	 #	 $/-	0	 #^	$>	 ?J]	K1	 26e	>-	 .8L	 9M	  :,!	  !	" .#	$ %	 	, dKuVLLr   c                    | j                  dd      j                  dd      j                  dd      j                  dd      S )	u%   HTML 이스케이프 (한글 보존).&z&amp;<z&lt;>z&gt;"z&quot;)replace)texts    r   r+   r+      s;     	S'"	f		f		h		r   )r   r   r   r   r   z
Path | strr   ztuple[int, int]r   zdict[str, object] | Noner   zPath | str | Noner   z
str | Nonereturnr   )r   r   r   r   r   r   r   r*   r   r*   r   r   r   zPath | Noner<   r   )r;   r   r<   r   )__doc__
__future__r   pathlibr   _backgroundsr   r   _pil_renderr   _satorir	   r
   r   r4   r+    r   r   <module>rD      s   	 #  G - : ).2)-"**
* *
 * ,* '* * 
*Z:M#&:M03:MDH:M-8:M=A:Mzr   