
    %<i.                        d Z ddlZddlZddlmZ ddlmZ ddlmZmZ ddl	Z	 G d d      Z
edk(  r e
       Z ed	        ed
        ed	        ed       ej                  dg dddg      Z ed       ej!                  ddddg d      Z ed       ej#                  ddg      Z ed        ed        ed	       yy)uj   
문서 생성 자동화 시스템
템플릿 기반 문서 자동 생성 + index.json 자동 업데이트
    N)datetime)Path)ListOptionalc                      e Zd ZdZddefdZddedededefd	Zd
edee   fdZdede	defdZ
	 	 	 	 ddedededee   dee   dee   fdZ	 	 	 	 	 	 ddededededededee   dee   dee   fdZ	 ddededee   dee   fdZy)DocumentGeneratoru   문서 자동 생성기Nmemory_pathc                    |t        t              j                  }t        |      | _        | j                  dz  | _        t
        j                  j                  dt        | j                               ddl	m
}  ||      | _        y)u	   초기화N	templatesr   )MemorySearchEngine)r   __file__parentr	   templates_pathsyspathinsertstrsearchr   search_engine)selfr	   r   s      @/home/jay/workspace/.worktrees/task-2057-dev2/memory/generate.py__init__zDocumentGenerator.__init__   sf    x.//K,"..< 	3t//01-/<    doc_typedatetitlereturnc                 H   |dk(  r| dS |dk(  rG|r@|j                         j                  dd      }dj                  d |D              }| d| dS | d	S |d
k(  r@|r=|j                         j                  dd      }dj                  d |D              }| dS y| d| dS )u   
        문서 ID 자동 생성

        Args:
            doc_type: 문서 타입 (daily, meeting, project)
            date: 날짜 (YYYY-MM-DD)
            title: 제목 (선택적)

        Returns:
            문서 ID
        daily-dailymeeting - c              3   L   K   | ]  }|j                         s|d k(  s|  ywr#   Nisalnum.0cs     r   	<genexpr>z1DocumentGenerator._generate_id.<locals>.<genexpr>3        JQ!))+cqJ   $$z-001z-meeting-001projectc              3   L   K   | ]  }|j                         s|d k(  s|  ywr&   r'   r)   s     r   r,   z1DocumentGenerator._generate_id.<locals>.<genexpr>:   r-   r.   z-phase-1zproject-phase-1)lowerreplacejoin)r   r   r   r   slugs        r   _generate_idzDocumentGenerator._generate_id    s     wV6?""{{},,S#6wwJ$JJqd++V<(("{{},,S#6wwJ$JJx((%q
$''r   template_namec                    | j                   | dz  }|j                         st        d|        y	 t        |dd      5 }|j	                         cddd       S # 1 sw Y   yxY w# t
        $ r}t        d|        Y d}~yd}~ww xY w)u   
        템플릿 로드

        Args:
            template_name: 템플릿 이름 (meeting, project-phase, daily)

        Returns:
            템플릿 내용
        z-template.mdu"   ⚠️ 템플릿이 없습니다: Nrutf-8encodingu   ❌ 템플릿 로드 실패: )r   existsprintopenread	Exception)r   r6   template_pathfes        r   _load_templatez DocumentGenerator._load_template?   s     ++|.LL##%6}oFG	mS7;  qvvx      	1!56	s5   A' A	A' A$ A' $A' '	B0BBtemplatemetadatac                 v   d}|j                         D ]W  \  }}t        |t              r|| ddj                  |       dz  }1t        |t              r|| d| dz  }M|| d| dz  }Y |dz  }|j                  d      r1|j                  dd      }t        |      d	k\  r
|d   }||z   S |}||z   S |}||z   S )
u   
        템플릿 채우기

        Args:
            template: 템플릿 내용
            metadata: 메타데이터

        Returns:
            채워진 문서 내용
        z---
z: [z, z]
z: 
z---      )items
isinstancelistr3   r   
startswithsplitlen)r   rE   rF   frontmatterkeyvaluepartscontents           r   _fill_templatez DocumentGenerator._fill_templateV   s     "..* 	3JC%&#c$))E*:);3??E3'#br22#br22	3 	w u%NN5!,E5zQ( W$$	 # W$$ GW$$r   hostparticipantskeywordsc           
         |#t        j                         j                  d      }|ddg}|g }| j                  d||      }|j	                         j                  dd      }dj                  d	 |D              }| d| d
}||d||d|g dd	}	| j                  d      }
|
sy| j                  |
|	      }| j                  dz  }|j                  d       ||z  }	 t        |dd      5 }|j                  |       ddd       t        d|        d| }| j                  j                  |      rt        d       nt        d       t!        |      S # 1 sw Y   YxY w# t"        $ r}t        d|        Y d}~yd}~ww xY w)u2  
        새 회의록 생성

        Args:
            title: 회의 제목
            date: 날짜 (YYYY-MM-DD), 없으면 오늘
            host: 주최자
            participants: 참여자 목록
            keywords: 키워드 목록

        Returns:
            생성된 파일 경로
        N%Y-%m-%du
   참여자1u
   참여자2r!   r"   r#   r$   c              3   L   K   | ]  }|j                         s|d k(  s|  ywr&   r'   r)   s     r   r,   z3DocumentGenerator.create_meeting.<locals>.<genexpr>   s     BQ!))+cqBr.   .mdu   시간planned)	idr   typerW   rX   durationrY   relatedstatusmeetingsTexist_okwr9   r:   u   ✅ 회의록 생성 완료: z	meetings/"   ✅ index.json 업데이트 완료%   ⚠️ index.json 업데이트 실패   ❌ 파일 저장 실패: )r   nowstrftimer5   r1   r2   r3   rD   rV   r	   mkdirr>   writer=   r   update_index_from_documentr   r@   )r   r   r   rW   rX   rY   doc_idr4   filenamerF   rE   rU   meetings_path	file_pathrB   relative_pathrC   s                    r   create_meetingz DocumentGenerator.create_meetingy   s   , <<<>**:6D (,7LH ""9dE: {{}$$S#.wwB$BBV1TF#& (  

 &&y1 %%h9 ((:5T*!H,		iw7 !1 ! 1)=> (z2M!!<<]K:<=?y>!! !  	.qc23	s1   E  *E<AE  EE   	F)E<<Fproject_namephase_numberteamleadmembersc	                    |#t        j                         j                  d      }|| d| }|ddg}||g}|j                         j	                  dd       d| }	d	| d|j                         j	                  dd       d
}
|	|d||||||g dd}| j                  d      }|sy| j                  ||      }| j                  dz  |j                         j	                  dd      z  dz  }|j                  dd       ||
z  }	 t        |dd      5 }|j                  |       ddd       t        d|        d|j                         j	                  dd       d|
 }| j                  j                  |      rt        d       nt        d       t        |      S # 1 sw Y   zxY w# t        $ r}t        d|        Y d}~yd}~ww xY w)u  
        새 프로젝트 Phase 생성

        Args:
            project_name: 프로젝트명
            phase_number: Phase 번호
            title: Phase 제목
            date: 날짜 (YYYY-MM-DD)
            team: 팀명
            lead: 팀장
            members: 팀원 목록
            keywords: 키워드 목록

        Returns:
            생성된 파일 경로
        Nr[   z Phase u   팀원1 (경량 모델)u   팀원2 (경량 모델)r"   r#   z-phase-zphase-r]   zproject-phaser^   )r_   r   r`   r/   phaserx   ry   rz   rY   rb   rc   projectsphasesT)parentsrf   rg   r9   r:   u&   ✅ 프로젝트 Phase 생성 완료: z	projects/z/phases/rh   ri   rj   )r   rk   rl   r1   r2   rD   rV   r	   rm   r>   rn   r=   r   ro   r   r@   )r   rv   rw   r   r   rx   ry   rz   rY   rp   rq   rF   rE   rU   projects_pathrs   rB   rt   rC   s                      r   create_project_phasez&DocumentGenerator.create_project_phase   s   8 <<<>**:6D =#nGL>:E ?02KLG$~H !&&(00c:;7<.Q L>5;;=+@+@c+J*K3O ##! 
 &&7 %%h9 ((:58J8J8L8T8TUXZ]8^^aiiD48!H,		iw7 !1 ! :9+FG ((:(:(<(D(DS#(N'OxX`WabM!!<<]K:<=?y>!! !  	.qc23	s1   F+ F&A8F+ F($F+ +	G4GGauthorc                 d   |#t        j                         j                  d      }|g }| d}| d}||d||g d}| j                  d      }|sy| j	                  ||      }| j
                  dz  }	|	j                  d       |	|z  }
	 t        |
d	d
      5 }|j                  |       ddd       t        d|
        d| }| j                  j                  |      rt        d       nt        d       t        |
      S # 1 sw Y   YxY w# t        $ r}t        d|        Y d}~yd}~ww xY w)u   
        일일 업무일지 생성

        Args:
            date: 날짜 (YYYY-MM-DD), 없으면 오늘
            author: 작성자
            keywords: 키워드 목록

        Returns:
            생성된 파일 경로
        Nr[   r    r]   r   )r_   r   r`   r   rY   rb   Tre   rg   r9   r:   u'   ✅ 일일 업무일지 생성 완료: zdaily/rh   ri   rj   )r   rk   rl   rD   rV   r	   rm   r>   rn   r=   r   ro   r   r@   )r   r   r   rY   rp   rq   rF   rE   rU   
daily_pathrs   rB   rt   rC   s                 r   create_dailyzDocumentGenerator.create_daily-  s]    <<<>**:6D H 6 V3< !$6_gtvw &&w/ %%h9 %%/
$')		iw7 !1 ! ;I;GH %XJ/M!!<<]K:<=?y>!! !  	.qc23	s1   
D D*AD DD 	D/D**D/)N)N   메인 관리자 (GLM-5)NN)NN	   개발팀u   팀장 (GLM-5)NN)Nr   N)__name__
__module____qualname____doc__r   r   r5   r   rD   dictrV   r   ru   intr   r    r   r   r   r      s   !=C =(S ( (C (3 (>C HSM .!%s !%d !%s !%L ."&"SS S 	S
 3iS s)S 
#Sr $!"]] ] 	]
 ] ] ] c] s)] 
#]@ ae>>(+>TXY\T]>	#>r   r   __main__z<============================================================u&   📝 문서 생성 자동화 테스트u#   
1️⃣ 회의록 생성 테스트u   팀장 주간 회의)u   전략기획팀장u   마케팅팀장u   개발팀장u   주간 회의u   진행 상황)r   rX   rY   u,   
2️⃣ 프로젝트 Phase 생성 테스트InsuWikirI   u   Wiki CRUD 기능r   )r   WikiCRUD)rv   rw   r   rx   rY   u-   
3️⃣ 일일 업무일지 생성 테스트u	   테스트u	   자동화)rY   z=
============================================================u)   ✅ 문서 생성 자동화 준비 완료)r   osr   r   pathlibr   typingr   r   yamlr   r   	generatorr=   ru   resultr   r   r   r   r   <module>r      s   
 
 
   ! [ [~
 z!#I	(O	
23	(O 

01%%$N!?3 & F 

9:++ - , F 

:;##k;-G#HF	/	
56	(O? r   