
    i4+                        d 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                  j                  Zedz  dz  Zdd	d
ddddddddddZdddddddZdefdZdeddfdZdefdZd0deded ed!edef
d"Zd0d#ededefd$Zd1d%ed&edee   fd'Zd%edee   fd(Zdefd)Zd*eddfd+Zd,eddfd-Zd. Zed/k(  r e        yy)2u=  
tech-debt.py - 기술부채 트래커

Usage:
    python3 scripts/tech-debt.py add --title "제목" --severity high|medium|low [--desc "설명"]
    python3 scripts/tech-debt.py list [--status open|resolved] [--severity high|medium|low]
    python3 scripts/tech-debt.py resolve <id>
    python3 scripts/tech-debt.py show <id>
    python3 scripts/tech-debt.py stats
    python3 scripts/tech-debt.py --help

Features:
    - 기술부채 항목 추가/조회/해결
    - memory/tech-debt.json에 저장
    - 각 항목: id, title, severity, status, created_at, resolved_at
    N)datetime)Path)Optionalmemoryztech-debt.jsonu   🔴   u   높음)emojiweightlabelu   🟡   u   중간u   🟢   u   낮음highmediumlowu   🔓u	   미해결r   r
   u   ✅u	   해결됨)openresolvedreturnc                  :   t         j                         sKdg t        j                         j	                  d      t        j                         j	                  d      ddS t        t         dd      5 } t        j                  |       cd	d	d	       S # 1 sw Y   y	xY w)
u   tech-debt.json 로드z1.0z%Y-%m-%d%Y-%m-%d %H:%M:%S)createdlast_updated)versionitemsmetadatarutf-8encodingN)	DATA_FILEexistsr   nowstrftimer   jsonload)fs    B/home/jay/workspace/.worktrees/task-2116-dev1/scripts/tech-debt.py	load_datar(   )   s|    #<<>22:> ( 7 78K L
 	
 
iw	/ 1yy|  s   2BBdatac           	         t        j                         j                  d      | d   d<   | j                  dg       }t	        |      t        d |D              t        d |D              t        d |D              t        d |D              t        d	 |D              d
| d   d<   t        j                  j                  dd       t        t        dd      5 }t        j                  | |dd       ddd       y# 1 sw Y   yxY w)u   tech-debt.json 저장r   r   r   r   c              3   J   K   | ]  }|j                  d       dk(  sd  yw)statusr   r   Nget.0is     r'   	<genexpr>zsave_data.<locals>.<genexpr>A   s     B!h6(AAB   ##c              3   J   K   | ]  }|j                  d       dk(  sd  yw)r,   r   r   Nr-   r/   s     r'   r2   zsave_data.<locals>.<genexpr>B   s     JaAEE(Oz,IJr3   c              3   t   K   | ]0  }|j                  d       dk(  s|j                  d      dk(  s-d 2 yw)r,   r   severityr   r   Nr-   r/   s     r'   r2   zsave_data.<locals>.<genexpr>C   s1     gqQUU8_-F155Q[K\`fKfg   888c              3   t   K   | ]0  }|j                  d       dk(  s|j                  d      dk(  s-d 2 yw)r,   r   r6   r   r   Nr-   r/   s     r'   r2   zsave_data.<locals>.<genexpr>D   s1     kquuX&/HQUUS]M^bjMj1kr7   c              3   t   K   | ]0  }|j                  d       dk(  s|j                  d      dk(  s-d 2 yw)r,   r   r6   r   r   Nr-   r/   s     r'   r2   zsave_data.<locals>.<genexpr>E   s1     eaAEE(Ov,E!%%PZJ[_dJder7   )totalr   r   	high_openmedium_openlow_openstatsT)parentsexist_okwr   r   Fr   )ensure_asciiindentN)r   r"   r#   r.   lensumr    parentmkdirr   r$   dump)r)   r   r&   s      r'   	save_datarI   9   s    '/||~'>'>?R'SD^$ HHWb!EUBuBBJ5JJgEggkekke5ee!DW 4$7	iw	/ 91		$a89 9 9s   C::Dc                      t               } | j                  dg       }|syd}|D ]:  }	 t        |j                  dd      j                  dd            }t	        ||      }< d|dz   d	S # t
        $ r Y Qw xY w)
u    고유 ID 생성 (TD-001 형식)r   zTD-001r   idzTD-000zTD- r   03d)r(   r.   intreplacemax
ValueError)r)   r   max_numitemnums        r'   generate_idrU   M   s    ;DHHWb!E G 	dhhtX.66ubABC'3'G 1S!""  		s   7A**	A65A6titler6   descriptiontagsc           
          t               }t               }|| |d||xs g t        j                         j	                  d      ddd	}|d   j                  |       t        |       |S )   기술부채 항목 추가r   r   N)	rK   rV   r6   r,   rW   rX   
created_atresolved_atresolution_noter   )r(   rU   r   r"   r#   appendrI   )rV   r6   rW   rX   r)   item_idrS   s          r'   add_itemr`   a   sj    ;DmG "
lln--.AB
D 	MdOK    r,   c                 "   t               }|j                  dg       }| r$|D cg c]  }|j                  d      | k(  s| }}|r$|D cg c]  }|j                  d      |k(  s| }}dddd|j                  fd	       |S c c}w c c}w )
u!   기술부채 항목 목록 조회r   r,   r6   r   r   r   r   c                 n    | j                  d      dk(  j                  | j                  d      d      fS )Nr,   r   r6   r   r-   )xseverity_orders    r'   <lambda>zlist_items.<locals>.<lambda>   s4    aeeHo;^=O=OPQPUPUV`Pacd=ef ra   )key)r(   r.   sort)r,   r6   r)   r   r1   re   s        @r'   
list_itemsri   y   s    ;DHHWb!E !?qQUU8_%>??!CqQUU:%6(%BCC  1Q7N	JJfJgL @Cs   BB
B$Br_   r]   c                 T   t               }|j                  dg       }|D ]y  }|j                  d      | k(  s|j                  d      dk(  rt        d|          yd|d<   t        j                         j                  d      |d<   ||d	<   t        |       |c S  t        d
|         y)u   기술부채 항목 해결r   rK   r,   r   u)   ⚠️ 이미 해결된 항목입니다: Nr   r\   r]   '   ❌ 항목을 찾을 수 없습니다: )r(   r.   printr   r"   r#   rI   )r_   r]   r)   r   rS   s        r'   resolve_itemrm      s    ;DHHWb!E 88D>W$xx!Z/A'KL'DN"*,,."9"9:M"ND&5D"#dOK 
3G9
=>ra   c                 z    t               }|j                  dg       }|D ]  }|j                  d      | k(  s|c S  y)u   특정 항목 상세 조회r   rK   Nr(   r.   )r_   r)   r   rS   s       r'   	show_itemrp      sB    ;DHHWb!E 88D>W$K ra   c            
      R   t               } | j                  di       }|j                  di       }|j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  d	d      |j                  d
d      dS )u   통계 출력r   r>   r:   r   r   r   r;   r<   r=   r   -)r:   r   r   r;   r<   r=   r   ro   )r)   r   r>   s      r'   
show_statsrs      s    ;Dxx
B'HLL"%E 7A&		&!$IIj!,YY{A.yy2IIj!, ^S9 ra   r   c                    | st        d       yt        d       t        d       t        ddddddd	ddd
d       t        d       | D ]  }t        j                  |j                  dd      ddd      }t        j                  |j                  dd      ddd      }|d    d|d    }|d    d|d    }|j                  dd      dd }t        |j                  dd      dd|dd|dd|d        t        d       y)u.   항목 목록을 테이블 형식으로 출력u!   등록된 항목이 없습니다.Nu   
📋 기술부채 목록zP================================================================================IDz<10 u   상태	   심각도u   제목z<40zP--------------------------------------------------------------------------------r,   r      ❓?r   r6   r      ⚪r   r
   rV   rr   &   rK   )rl   STATUS_OPTIONSr.   SEVERITY_LEVELS)r   rS   status_infoseverity_info
status_strseverity_strrV   s          r'   print_item_tabler      s6   12	
&'	(O	T#Ja~Q{3&7q#
GH	(O \$(((F)Cu_bEcd'++DHHZ,GSXcfIgh#G,-Q{7/C.DE
'01=3I2JK#&s+$$S):c*:!L;MQuUXkZ[\ 
(Ora   rS   c           	         t         j                  | j                  dd      ddd      }t        j                  | j                  dd      ddd      }t        d	d
        t        d| j                  dd       d| j                  dd              t        d
        t        d|d    d|d           t        d|d    d|d           t        d| j                  dd              | j                  d      rt        d| j                  d              | j                  d      rt        d| j                  d              | j                  d      rt        d| j                  d              | j                  d      r-t        ddj	                  | j                  dg                     t        d
 d	       y )!u   항목 상세 출력r,   r   rx   ry   r   r6   r   rz   
z<============================================================u   📋 rK   rr   z: rV   u   상태: r   rv   r
   u   심각도: u   생성일: r[   r\   u   해결일: r]   u   해결 메모: rW   u	   
설명:
rX   u	   
태그: z, N)r|   r.   r}   rl   join)rS   r~   r   s      r'   print_item_detailr      s    $$TXXh%?5[^A_`K#''U(Cu_bEcdM	Bvh-	E$((4%&b'3)?(@
AB	VH	H[)*!K,@+A
BC	Kg./qw1G0H
IJ	Ks34
56xxDHH]3456xx!"): ;<=>xxDHH]3456xx
499TXXfb%9:;<=	VHB-ra   c                     t        j                  dt         j                  d      } | j                  dd      }|j	                  dd	      }|j                  d
ddd       |j                  dddg dd       |j                  ddd d       |j                  ddg d       |j	                  dd	      }|j                  ddd gd d!"       |j                  dg dd d#"       |j	                  d$d%	      }|j                  d&d'	       |j                  d(d)d d*       |j	                  d+d,	      }|j                  d&d'	       |j	                  d-d.	       | j                         }|j                  s%| j                          t        j                  d/       |j                  dk(  rt        |j                  |j                  |j                  |j                  0      }t         j#                  |d1   d2d3i      }t%        d4       t%        d5|d&           t%        d6|d7           t%        d8|d2    d9|d1           y |j                  dk(  r-t'        |j(                  |j                  :      }	t+        |	       y |j                  d$k(  r_t-        |j.                  |j0                  ;      }|r;t%        d<|j.                          t%        d6|d7           t%        d=|d>           y y |j                  d+k(  rQt3        |j.                        }|rt5        |       y t%        d?|j.                          t        j                  d/       y |j                  d-k(  rt7               }
t%        d@       t%        dA       t%        dB|
dC    dD       t%        dE|
d    dD       t%        dF|
dG    dD       t%        dH|
dI    dD       t%        dJ|
dK    dD       t%        dL|
d     dD       t%        dA       t%        dM|
dN           y y )ONu   기술부채 트래커u9  
예시:
  python3 scripts/tech-debt.py add --title "레거시 코드 리팩토링" --severity high
  python3 scripts/tech-debt.py list --status open
  python3 scripts/tech-debt.py resolve TD-001 --note "리팩토링 완료"
  python3 scripts/tech-debt.py show TD-001
  python3 scripts/tech-debt.py stats
        )rW   formatter_classepilogcommandu	   명령어)desthelpaddrZ   )r   z--titlez-tTu   항목 제목)requiredr   z
--severityz-sr   rw   )r   choicesr   z--descz-du   상세 설명)defaultr   z--tags+u   태그)nargsr   r   listu   항목 목록 조회z--statusr   r   u   상태 필터)r   r   r   u   심각도 필터resolveu   항목 해결rK   u	   항목 IDz--notez-nu   해결 메모showu   항목 상세 조회r>   u   통계 조회r   )rV   r6   rW   rX   r6   r   rz   u&   ✅ 기술부채 항목 추가 완료!z   ID: u      제목: rV   u      심각도: rv   )r,   r6   )r]   u   ✅ 항목 해결 완료: u      해결일: r\   rk   u   
📊 기술부채 통계z(========================================u   총 항목: r:   u   개u   미해결: u     🔴 높음: r;   u     🟡 중간: r<   u     🟢 낮음: r=   u   해결됨: u   마지막 업데이트: r   )argparseArgumentParserRawDescriptionHelpFormatteradd_subparsers
add_parseradd_argument
parse_argsr   
print_helpsysexitr`   rV   r6   descrX   r}   r.   rl   ri   r,   r   rm   rK   noterp   r   rs   )parser
subparsersr   list_parserresolve_parsershow_parserargsrS   r   r   r>   s              r'   mainr      s   $$, <<F &&IK&HJ &&u3O&PJItdQL$G`grsHdDOHC(K ''5K'LKZ&*1EtZij\3LVZast  **9?*KN;7$?S ''5K'LKT4 '8D<<||udjj4==dii^b^g^gh'++D,<w>NO68T
|$%DM?+,}W56aZ8H7IJK		$++F		"DGGTYY?.twwi89KW/0N4#6"789 
 
	!d#;DGG9EFHHQK		 *+hU7^,C01E&M?#./k 23378m 45S9:j 12#67E*-.c23h(~)>(?@A 
!ra   __main__)NN)N)__doc__r   r$   r   r   pathlibr   typingr   __file__rF   WORKSPACE_ROOTr    r}   r|   dictr(   rI   strrU   r   r`   ri   rm   rp   rs   r   r   r   __name__ ra   r'   <module>r      su  "   
    h&&--X%(88	 H=!h?q8< %+[AY^itOuv4  9D 9T 9(#S #(C 3 S t W[ 0s S D $#  x~ ,	s 	x~ 	D "D T 0D T 0TBn zF ra   