
    yi
                        d Z ddlmZ ddlZddlZddlmZ ddd	 	 	 	 	 	 	 	 	 ddZdd		 	 	 	 	 	 	 dd
Zdd	 	 	 	 	 	 	 	 	 ddZ	dddZ
y)u8  Hybrid 패턴 배경 생성 헬퍼 — 통합 경로 (Codex CLI / Gemini CLI / Satori) 한정.

외부 API 직접 호출 절대 금지:
- ❌ import openai, import anthropic, google.generativeai 직접 사용 금지
- ❌ HTTP requests로 api.openai.com, generativelanguage.googleapis.com 호출 금지
- ✅ subprocess.run(["codex", "exec", "--image-out", path, prompt]) — H3
- ✅ subprocess.run(["gemini", "-p", prompt]) — H1, H2
- ✅ CLI 부재 시 placeholder 그라디언트로 graceful fallback

IDS Phase 1 §3.2.1 / §0.2 Hybrid Pattern Standard 준수.
    )annotationsN)Path	photoreal   )styletimeoutc          	     d   t        |      }|j                  j                  dd       t        j                  d      }|y| d|  }	 t        j                  |d|dt        |      gdd|       |j                         r|S dS # t
        j                  t
        j                  t        f$ r Y yw xY w)	u  Gemini CLI 통합 경로로 배경 이미지를 생성한다.

    Args:
        prompt: 영문 prompt (한글 텍스트는 별도 Satori 오버레이로 처리).
        output_path: 출력 이미지 경로.
        style: "photoreal" | "illustration" 등.
        timeout: CLI timeout (초).

    Returns:
        생성된 이미지 경로 또는 None (CLI 부재/실패 시).
    Tparentsexist_okgeminiNz. style background image, no text, no letters: z-p--image-outcheckcapture_outputr   r   parentmkdirshutilwhich
subprocessrunstrCalledProcessErrorTimeoutExpiredFileNotFoundErrorexists)promptoutput_pathr   r   
gemini_binfull_prompts         @/home/jay/workspace/skills/hybrid-image/patterns/_backgrounds.pygenerate_gemini_backgroundr#      s    $ {#KTD9h'JGI&RK{M3{;KL		
 &,,.;8D8 )):+D+DFWX s   	'B (B/.B/)r   c               V   t        |      }|j                  j                  dd       t        j                  d      }|y	 t        j                  |ddt        |      | gdd|       |j                         r|S dS # t
        j                  t
        j                  t        f$ r Y yw xY w)u  Codex CLI 통합 경로로 GPT image 배경을 생성한다.

    `codex exec --image-out path.png "<prompt>"` 형식. 외부 OpenAI API 직접 호출
    절대 금지 — 반드시 codex CLI 경유.

    Args:
        prompt: 영문 prompt.
        output_path: 출력 이미지 경로.
        timeout: CLI timeout (초).

    Returns:
        생성된 이미지 경로 또는 None (CLI 부재/실패 시).
    Tr
   codexNexecr   r   r   )r   r   r   	codex_bins       r"   generate_codex_gpt_backgroundr(   ;   s    & {#KTD9W%Is;/?H		
 &,,.;8D8 )):+D+DFWX s   'A= =(B('B()fallback_gradientc                   d| d| d}| It        |       j                         r0t        |       j                         j                         }d| d| dS |xs d}d| d| d	S )
u8  배경 레이어 HTML을 생성한다.

    Args:
        background_path: 이미지 파일 경로 (None이면 fallback_gradient 사용).
        width: 폭.
        height: 높이.
        fallback_gradient: 배경 부재 시 적용할 CSS gradient.

    Returns:
        Satori-호환 background div HTML.
    z(position:absolute; top:0; left:0; width:zpx; height:zpx; display:flex;z<div style="z background-image:url(z=); background-size:cover; background-position:center;"></div>z>linear-gradient(135deg, #1a1f3a 0%, #2d2050 50%, #4a2a6e 100%)z background:z	;"></div>)r   r   resolveas_uri)background_pathwidthheightr)   
base_styleurigradients          r"   build_background_layer_htmlr3   b   s    & 35'VH M 	 
 "tO'<'C'C'E?#++-446:,&<SE BI J	

 ! H  *\(9EE    c                <    dddddd}|j                  | |d         S )u   그라디언트 프리셋. (H4, fallback 공통)

    Args:
        theme: "navy" | "warm" | "mint" | "rose" | "mono".

    Returns:
        CSS linear-gradient 문자열.
    z>linear-gradient(135deg, #0f1729 0%, #1e2952 50%, #2a3a7a 100%)z>linear-gradient(135deg, #2a1810 0%, #5c2a1a 50%, #a04020 100%)z>linear-gradient(135deg, #0a2820 0%, #1a4a3c 50%, #2d7a64 100%)z>linear-gradient(135deg, #2a1020 0%, #5a1e3e 50%, #a83a6e 100%)z>linear-gradient(135deg, #0a0a0a 0%, #1a1a1a 50%, #2a2a2a 100%))navywarmmintrosemonor6   )get)themepresetss     r"   default_gradientr>      s2     QPPPPG ;;ugfo..r4   )
r   r   r   
Path | strr   r   r   intreturnPath | None)r   r   r   r?   r   r@   rA   rB   )
r-   zPath | str | Noner.   r@   r/   r@   r)   z
str | NonerA   r   )r6   )r<   r   rA   r   )__doc__
__future__r   r   r   pathlibr   r#   r(   r3   r>    r4   r"   <module>rG      s   
 #    $9$9$9 	$9
 $9 $9V 	$9$9$9 	$9
 $9X %)"F&"F "F 	"F
 ""F 	"FJ/r4   