
    i                        d Z ddlmZ ddlZddlZddlZddlZddlZddlmZ ddl	m
Z
 ddlmZ  e
e      j                  Zedz  Zedz  Zed	z  Zd
ZddZddZddZddZdddZy)uv   todo-manager 공통 유틸리티.

파일 경로 상수, 로드/저장, ID 생성, 이슈 검색, JSON 출력 헬퍼.
    )annotationsN)datetime)Path)Anyz	todo.jsonztodo.json.bakztodo-removed.jsonzutf-8c                     t         j                         sdg ddS t        t         t              5 } t	        j
                  |       cddd       S # 1 sw Y   yxY w)u   todo.json 로드.z1.0N)versionissueslast_syncedencoding)	TODO_FILEexistsopenENCODINGjsonload)fs    B/home/jay/workspace/.worktrees/task-2116-dev1/memory/todo_utils.py	load_todor      sG     BtDD	i(	+ qyy|  s   AAc                   t         j                         rt        j                  t         t               t        j                  t        d      \  }}	 t        j                  |dt              5 }t        j                  | |dd       ddd       t        |t              5 }t        j                  |       ddd       t        j                  |t                t        j                   j                  |      rt        j"                  |       yy# 1 sw Y   xY w# 1 sw Y   exY w# t        j                   j                  |      rt        j"                  |       w w xY w)	u)   todo.json 저장 (atomic write + 검증).z.tmp)dirsuffixwr   F   ensure_asciiindentN)r   r   shutilcopy2BACKUP_FILEtempfilemkstemp
SCRIPT_DIRosfdopenr   r   dumpr   r   movepathunlink)datafdtmp_pathr   s       r   	save_todor-   #   s     Y, ##
6BLB YYr32 	=aIIdAE!<	= (X. 	!IIaL	 	Hi( 77>>(#IIh $	= 	=	 	 77>>(#IIh $s<   D' .DD' !D7"D' DD' D$ D' '7Ec           	         d}| j                  dg       D ]O  }t        j                  d|j                  dd            }|s,t        |t	        |j                  d                  }Q d|dz   dS )	u2   다음 issue ID 생성 (기존 최대 숫자 + 1).r   r	   zissue-(\d+)id    zissue-03d)getrematchmaxintgroup)r*   max_numissuer5   s       r   get_next_idr;   ;   sn    G(B' 84)<='3u{{1~#67G8 GaK$%%    c                b    | j                  dg       D ]  }|j                  d      |k(  s|c S  y)u   이슈 찾기.r	   r/   N)r3   )r*   issue_idr:   s      r   
find_issuer?   E   s6    (B' 99T?h&L r<   c                    |r"t        t        j                  | dd             yt        t        j                  | d             y)u   JSON 출력.Fr   r   )r   N)printr   dumps)r*   prettys     r   
print_jsonrD   M   s-    djjE!<=djjE23r<   )returndict[str, Any])r*   rF   rE   None)r*   rF   rE   str)r*   rF   r>   rH   rE   zdict[str, Any] | None)T)r*   r   rC   boolrE   rG   )__doc__
__future__r   r   r$   r4   r   r!   r   pathlibr   typingr   __file__parentr#   r   r    REMOVED_FILEr   r   r-   r;   r?   rD    r<   r   <module>rR      sw   
 #  	 	      (^""
$	?*//  0&4r<   