o
    h@                     @  s   U d dl mZ d dlmZmZmZ d dlZd dlZd dlZd dl	m
Z
mZmZ d dlmZ d dlmZmZ e
 ZedZg dZd	ed
< edZd-ddZd.ddZd/ddZddddZd/ddZd0d d!Zejd"ed#ed$d%ed d%fd1d+d,Z dS )2    )annotations)DictListTupleN)	APIRouterRequestQuery)HTMLResponse)	templatessbzgov.motie.heads))u	   장관실r   u   장관)	   대변인   r   )u   홍보담당관      과장)u   홍보지원팀r      팀장)	   감사관r   r   )u   감사담당관r   r   )
   제1차관r   u   1차관)u   운영지원과r   r   )u   기획조정실r      실장)u   정책기획관r      국장)u   기획재정담당관   r   )u   혁신행정담당관r   r   )u   규제개혁법무담당관r   r   )u   정보관리담당관r   r   )u   정보보호담당관r   r   )u   비상안전기획관r   r   )u   산업재난담당관r   r   )u   산업정책실r   r   )u   산업정책관r   r   )u   산업정책과r   r   )u   산업일자리혁신과r   r   )u   산업환경과r   r   )u   산업인공지능혁신과r   r   )u   기업정책팀r   r   )u   산업공급망정책관r   r   )u   산업공급망정책과r   r   )u   소재부품장비개발과r   r   )u   철강세라믹과r   r   )u   화학산업팀r   r   )u   제조산업정책관r   r   )u   기계로봇제조정책과r   r   )u   자동차과r   r   )u   조선해양플랜트과r   r   )u   엔지니어링디자인과r   r   )u   첨단민군혁신지원과r   r   )u   첨단산업정책관r   r   )u   반도체과r   r   )u   배터리전기전자과r   r   )u   바이오융합산업과r   r   )u   섬유탄소나노과r   r   )u   디스플레이가전팀r   r   )u   산업기반실r   r   )u   산업기술융합정책관r   r   )u   산업기술정책과r   r   )u   산업기술개발과r   r   )u   산업기술시장혁신과r   r   )u   규제샌드박스팀r   r   )u   지역경제정책관r   r   )u   지역경제총괄과r   r   )u   지역경제진흥과r   r   )u   입지총괄과r   r   )u   중견기업정책관r   r   )u   중견기업정책과r   r   )u   중견기업지원과r   r   )u   유통물류과r   r   )
   제2차관r   u   2차관)u   에너지정책실r   r   )u   에너지정책관r   r   )u   에너지정책과r   r   )u   에너지효율과r   r   )u   에너지기술과r   r   )u   전력정책관r   r   )u   전력산업정책과r   r   )u   전력시장과r   r   )u   신산업분산에너지과r   r   )u   전력계통혁신과r   r   )u   재생에너지정책관r   r   )u   재생에너지정책과r   r   )u   재생에너지산업과r   r   )u   재생에너지보급과r   r   )u   수소경제정책관r   r   )u   수소경제정책과r   r   )u   수소산업과r   r   )u   에너지안전과r   r   )u   자원산업정책국r   r   )u   자원안보정책과r   r   )u   석유산업과r   r   )u   가스산업과r   r   )u   석탄산업과r   r   )u   광물자원팀r   r   )u   원전산업정책국r   r   )u   원전산업정책과r   r   )u   원전환경과r   r   )u   원전지역협력과r   r   )u   원전전략기획관r   r   )u   원전수출진흥과r   r   )u   원전수출협력과r   r   )u   통상교섭본부장실r   u   통상교섭본부장)   통상차관보r   r   )u   통상정책국r   r   )u   통상정책총괄과r   r   )u   미주통상과r   r   )u   구주통상과r   r   )u   중남미대양주통상팀r   r   )u   신통상전략지원관r   r   )u   신통상전략과r   r   )u   디지털경제통상과r   r   )u   기후에너지통상과r   r   )u   통상협력국r   r   )u   통상협력총괄과r   r   )u   동북아통상과r   r   )u   아주통상과r   r   )u   중동아프리카통상과r   r   )u   통상교섭실r   r   )u   자유무역협정정책관r   r   )u!   자유무역협정정책기획과r   r   )u   자유무역협정이행과r   r   )u   통상협정활용과r   r   )u   인도태평양통상기획팀r   r   )u   자유무역협정교섭관r   r   )u!   자유무역협정협상총괄과r   r   )u   자유무역협정상품과r   r   )u$   자유무역협정서비스투자과r   r   )u!   자유무역협정무역규범과r   r   )u   다자통상법무관r   r   )u   통상법무기획과r   r   )u   세계무역기구과r   r   )u   다자통상협력과r   r   )u   통상분쟁대응과r   r   )u   무역투자실r   r   )u   무역정책관r   r   )u   무역정책과r   r   )u   무역진흥과r   r   )u   수출입과r   r   )u   투자정책관r   r   )u   투자정책과r   r   )u   투자유치과r   r   )u   해외투자과r   r   )u   무역안보정책관r   r   )u   무역안보정책과r   r   )u   무역안보심사과r   r   )u   기술안보과r   r   )u   국가기술표준원r      원장)u	   원장실r   r   )u   지원총괄과r   r   )u   표준정책국r   r   )u   표준정책과r   r   )u   국제표준협력과r   r   )u   산업표준혁신과r   r   )u   전기전자정보표준과r   r   )u   기계융합산업표준과r   r   )u!   바이오화학서비스표준과r   r   )u$   국제표준화기구전략대응팀r   r   )u   제품안전정책국r   r   )u   제품안전정책과r   r   )u   제품시장관리과r   r   )u   제품안전정보과r   r   )u   전기통신제품안전과r   r   )u   생활어린이제품안전과r   r   )u   적합성정책국r   r   )u   시험인증정책과r   r   )u   적합성평가과r   r   )u   인증산업진흥과r   r   )u   계량측정제도과r   r   )u   기술규제대응국r   r   )u   기술규제정책과r   r   )u   무역기술장벽협상과r   r   )u   기술규제조정과r   r   )u   기술규제협력과r   r   )u   무역위원회r   	   위원장)   상임위원r   r   )u   무역조사실r   r   )u   무역구제정책과r   r   )u   산업피해조사과r   r   )u   덤핑조사과r   r   )u   덤핑조사지원과r   r   )u   불공정무역조사과r   r   )u   판정지원과r   r   )u   광업등록사무소r      소장)u	   등록팀r   r   )u	   심사팀r   r   )u   동부광산안전사무소r   r   )u   중부광산안전사무소r   r   )u   서부광산안전사무소r   r   )u   남부광산안전사무소r   r   )u   전기위원회r   r   )u	   사무국r   u   사무국장)u   경제자유구역기획단r   u   단장)u   정책기획팀r   r   )u   혁신지원팀r   r   )u   서비스투자지원팀r   r   )u   개발투자지원팀r   r   )u!   마산자유무역지역관리원r   r   u	   관리과r   r   u   수출산업과r   r   )u   투자홍보과r   r   )u!   군산자유무역지역관리원r   r   r   r   )u   비상계획과r   r   )u!   대불자유무역지역관리원r   r   r   r   )u!   동해자유무역지역관리원r   r   )u!   율촌자유무역지역관리원r   r   )u!   김제자유무역지역관리원r   r   r   r   )u!   울산자유무역지역관리원r   r   r   r   zList[Tuple[str, int, str]]MOTIE_ORDER_POSz[\u200b\u200c\u200d\uFEFF]sstrreturnc                 C  sJ   | pd} |  dd dd dd} td| } |  } tdd| } | S )N      u    u   　z\s+)replace_INVISIBLESsubstripre)r    r*   2/var/www/html/bot/app/web/pages/gov/motie/heads.py_norm   s   r,   posc                 C  s0   t | }tdd| }tdd| }|S )Nz\(.*?\)$r"   u   (직무대리|대행|겸임)$)r,   r)   r'   r(   )r-   pr*   r*   r+   _normalize_position   s   r/   depc                 C  s4   t | }|dddd}|dddd}|S )	Nu   제 1차관r   u   제 2차관r   u   제 1차관실   제1차관실u   제 2차관실   제2차관실)r,   r%   r0   dr*   r*   r+   _normalize_department   s   r5   r   r   r   )r1   r2   u   대변인실c                 C  s   t | }t||S )N)r5   DEPT_CANON_MAPgetr3   r*   r*   r+   _canon_department   s   r8   cands
List[dict]dict | Nonec                 C  s"   | sd S dd }t | |ddd S )Nc                 S  sL   |  drt|  d rt|  d dkrdnd}||  dp$dfS )Nphone-r   r   namer"   )r7   r    r(   )x	has_phoner*   r*   r+   score   s   :z_pick_best.<locals>.scoreT)keyreverser   )sorted)r9   rA   r*   r*   r+   
_pick_best   s   rE   z/gov/motie/heads)response_classr"   )defaultrequestr   qdebugintc           %        s  zt ddjdddd jpg }W n ty#   g }Y nw |rg }|p+d 	 }|D ]J}|
d|
d	p>d
|
dpDd pHd|
d|
dpRd pVd|
dp\d p`dd}ddd | D 	 }|rw||v r||| q2td| d||ddt| gg dS zt ddd jpg }	W n ty }
 ztd|
 g }	W Y d }
~
nd }
~
ww g  dB fd d!}|d"t|	  g }t|	D ]v\}}|
d#pd}|
dpd}t|}t|}t|
dpd}t|
dpd}t|
dpd}|||||||d$}|| d%krN||kp+||k}|s4d&krN|d'| d(| d)| d*| d)| d+| d,| d- qi }|D ]}|d# }|d }|rn|rn|||fg | qS|d.t|  t|	 }g }g }tD ]\}}}t|}t|}|
||fg }t|}|r|d pd}|d p|}|d pd}|d pd}d/kr|d0| d1| d2| d3| d4| d5t| d6 d&krt|D ]\}} |d7| d8| d  d9| d  d4| d  d-	 qnQd|ddf\}}}}|||f d/krStd:d; | D }!td<d; | D }"tj||!d&d=d>}#tj||"d&d=d>}$|d?| d1| d2| d@|# dA|$ 
 ||||||d}|rn|d|||||g	 v rs|| qtd| d|| |dS )CNmotie_heads_curz(unit,position,name,phone,task,indent,ordordF)desci  r"   unitindentr   r>   u   (공석)positionr<   r=   task)rO   rP   r>   rQ   r<   rR   r$   c                 S  s   g | ]}t |pd qS )r"   )r    ).0r?   r*   r*   r+   
<listcomp>!  s    z+gov_motie_heads_ordered.<locals>.<listcomp>zgov/motie/heads.htmlu   산업통상자원부(MOTIE)z![info] using motie_heads_cur viewz[info] rows=)rH   ministryrI   itemsrJ   	dbg_linesmissesmotie_org_curz#department,position,name,phone,taskiP  z![heads] Supabase fetch failed: %smsgr    c                   s$     |  dkrt|  d S d S )Nr   )appendlogrJ   )rZ   rW   rJ   r*   r+   _dbgB  s   
z%gov_motie_heads_ordered.<locals>._dbgz[heads] fetched_rows=
department)department_rawr_   position_rawrQ   r>   r<   rR   r   r   z[normalize#z] dep:'u   '→'z', pos:'z	', name:'z
', phone:''z[heads] unique_keys=r   z[match] OK unit='z	', key=('z','z'), picked='z
', phone='z	' (cands=)u     └ cand[z] name='z', pos='c                 S  s   h | ]\}}|qS r*   r*   )rS   r4   _r*   r*   r+   	<setcomp>      z*gov_motie_heads_ordered.<locals>.<setcomp>c                 S  s   h | ]\}}|qS r*   r*   )rS   rd   r.   r*   r*   r+   re     rf   g333333?)ncutoffz[match] MISS unit='z') near_dep=z
 near_pos=)rZ   r    )r   tableselectorderlimitexecutedata	Exceptionr(   lowerr7   joinvaluesr[   r
   TemplateResponselenr\   	exception	enumerater8   r/   r,   
setdefaultr   rE   listkeysdifflibget_close_matches)%rH   rI   rJ   vrV   rB   rrowhayrowser^   	norm_rowsidep_rawpos_rawr0   r-   r>   r<   rR   recchangedby_keyrX   rO   rP   expected_posdep_normpos_normr9   jcdep_keyspos_keysnear_depnear_posr*   r]   r+   gov_motie_heads_ordered  s  


4
2
2
&$
r   )r   r    r!   r    )r-   r    r!   r    )r0   r    r!   r    )r9   r:   r!   r;   )rH   r   rI   r    rJ   rK   )!
__future__r   typingr   r   r   r)   rz   loggingfastapir   r   r   fastapi.responsesr	   app.web.depsr
   r   router	getLoggerr\   r   __annotations__compiler&   r,   r/   r5   r6   r8   rE   r7   r   r*   r*   r*   r+   <module>   s4    
 
N




