
    jI!                    h   d Z ddlmZ ddlmZ ddlmZ ddlZddlm	Z	m
Z
mZ ddlmZmZmZ e	rddlmZmZ dd	lmZmZ  ed
d
       G d d             ZddZ	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 d dZd!dZ G d de      Zd"dZd#dZ	 	 	 	 	 	 	 	 d$dZ	 	 	 	 	 	 	 	 d$dZ d%dZ!d&dZ" G d d      Z#y)'z2Weekly owner-card rendering and callback controls.    )annotations)	dataclass)StrEnumN)TYPE_CHECKINGNeverassert_never)NutritionDraftCallbackDenied"NutritionDraftCallbackDenialReason%nutrition_draft_callback_route_denial)InlineKeyboardMarkupMessage)DraftActionIncomingAddressT)frozenslotsc                  "    e Zd ZU ded<   ded<   y)WeeklyOwnerEditControlstracknowledgement	card_textN)__name__
__module____qualname____annotations__     k/home/cube/projects/richard/.worktrees/nutricoach-v140-impl/gateway/platforms/telegram_weekly_host_owner.pyr   r      s    Nr   r   c                    ddl m}  ||       S )Nr   )render_weekly_owner_card)-gateway.platforms.nutrition_weekly_owner_cardr   )actionr   s     r   weekly_owner_cardr"      s     $F++r   c                R    t        | j                  |d       S |j                        S N)r   keyactual
configureds     r   weekly_owner_callback_denialr)   $   s1     1

" (2 r   c                 4    t        t        j                        S r$   )r	   r
   ROUTE_UNAVAILABLEr   r   r   weekly_owner_route_unavailabler,   .   s    '*<< r   c                `    t        |       }|t        d| d      S d}t        d| d|       S )Nu+   수정할 고객 문구를 보내주세요.u.   
수정 안내: 고객 문구를 보내세요.u   문구만 수정하려면 새 문구를 그대로 보내세요.
목표도 수정하려면 첫 줄에 `목표 kcal 단백질g 탄수화물g 지방g`, 다음 줄부터 고객 문구를 보내세요.uF   수정할 목표와 고객 문구를 이 토픽으로 보내주세요.z

)r"   r   )r!   legacy_card_textcardinstructions       r   weekly_owner_edit_controlr1   4   sZ     V$D%9fCD
 	

	: 
 "P
D. r   c                    t        |       y	 y)Nu4   수정 안내: 고객 문구를 입력해 주세요.u   수정 형식을 확인해 주세요. 목표 수정은 첫 줄에 `목표 kcal 단백질g 탄수화물g 지방g`, 다음 줄에 고객 문구를 입력합니다.r"   r!   s    r   weekly_owner_invalid_edit_textr5   I   s     ,E	:r   c                       e Zd ZdZdZdZdZdZy)_OwnerControlStatusgeneration_failedcreatededitedapprovedotherN)r   r   r   GENERATION_FAILEDCREATEDEDITEDAPPROVEDOTHERr   r   r   r7   r7   S   s    +GFHEr   r7   c                X    	 t        |       S # t        $ r t         j                  cY S w xY wr$   )r7   
ValueErrorrA   values    r   _owner_control_statusrF   [   s-    )"5)) )"((()s   
 ))c                    t        d|       )Nzinvalid owner control status: )AssertionErrorrD   s    r   _invalid_owner_control_statusrI   b   s    
9%C
DDr   c                   ddl m}m} | j                  xs dr(&t	        t
              rt        j                  d      y dfd}t        | j                        xt        j                  k(  r  |d |d            gg}nxxt        j                  k(  rnxt        j                  k(  rn nC   |d	 |d
             |d |d            g |d |d             |d |d            gg}nbxt        j                  k(  r#  |d |d             |d |d            gg}n,xt        j                  k(  r g }n}t!        t#        |             t%        d D              ry |r ||      S d S )Nr   InlineKeyboardButtonr    [a-f0-9]{1,16}c                     d d|  d d S )Nn3::r   )	operation
card_noncedraft_idrender_identitys    r   callbackz%weekly_owner_markup.<locals>.callbackt   s#    XJa	{!J<q8IJJr   u	   재시도rcallback_datau   수정eu	   재생성u   승인au   보류hu   고객에게 보내기su   승인 철회vc              3     K   | ];  }|D ]4  }t        t        |j                        j                  d             dkD   6 = yw)utf-8@   N)lenr   rY   encode).0rowitems      r   	<genexpr>z&weekly_owner_markup.<locals>.<genexpr>   sE      CD 	C""#**734r9 	:s   AA)rR   r   returnr   )telegramrL   r   rT   
isinstancer   re	fullmatchrF   statusr7   r=   r>   r?   r@   rA   r   rI   any)	r!   rU   rS   rL   r   rV   rowsunreachablerT   s	    ``     @r   weekly_owner_markuprq   f   si    D$"H/3/<<)?;CK  
.2 22)+Xc]STUDE( ((+E+>+E+EE )#O(HSMR
 )#O(#O	D * ))$%=XVY][$_HSMR D ' &&D6{CD
  
 )-%747r   c                    ddl m}m} | j                  }|(|&t	        |t
              rt        j                  d|      y d| d| d| }t        |j                  d            dkD  ry  | |d	|
      gg      S )Nr   rK   rN   rP   z:c:rQ   r`   ra   u   전달 기록 복구rX   )
ri   rL   r   rT   rj   r   rk   rl   rb   rc   )r!   rU   rS   rL   r   rT   rY   s          r   weekly_owner_reconcile_markuprs      s     DH/3/<<)?;C(3zl!O3DEM
=()B.3=Q" !  r   c                    | j                   }t        |t              rt        |t              s|nd }|t	        | dd      du fS )Nis_topic_messageFT)message_thread_idrj   intboolgetattr)messageobserved	thread_ids      r   telegram_thread_contextr}      sK    ((H h$Z$-G 	 
 gg'95ATIIIr   c                ,    t        |       t        u r| S d S r$   )typerw   rD   s    r   real_telegram_thread_idr      s    K3&50D0r   c                  @   e Zd ZdZedd       Zedd	 	 	 	 	 dd       Zedd	 	 	 	 	 dd       Ze	 	 	 	 	 	 dd       Z	edd       Z
e	 	 	 	 	 	 dd	       Zedd
       Zedd       Zedd       Zedd       Ze	 	 	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 	 	 dd       Zy)TelegramWeeklyOwnerMixinz3Expose owner controls without Telegram SDK imports.c                    | }t         r$   )NotImplementedError)r!   _s     r    _nutrition_generation_card_noncez9TelegramWeeklyOwnerMixin._nutrition_generation_card_nonce   s    !!r   N)rU   c               :    t        ||| j                  |            S r$   )rq   r   clsr!   rU   s      r   _nutrition_draft_markupz0TelegramWeeklyOwnerMixin._nutrition_draft_markup   s#     #OS%I%I&%Q
 	
r   c               :    t        ||| j                  |            S r$   )rs   r   r   s      r   !_nutrition_draft_reconcile_markupz:TelegramWeeklyOwnerMixin._nutrition_draft_reconcile_markup   s#     -OS%I%I&%Q
 	
r   c                    t        | |      S r$   )r)   r&   s     r   _weekly_owner_callback_denialz6TelegramWeeklyOwnerMixin._weekly_owner_callback_denial   s     ,FJ??r   c                    t        |       S r$   r3   r4   s    r   _weekly_owner_cardz+TelegramWeeklyOwnerMixin._weekly_owner_card   s     ((r   c                    t        | |      S r$   )r1   )r!   r.   s     r   _weekly_owner_edit_controlz3TelegramWeeklyOwnerMixin._weekly_owner_edit_control   s     )1ABBr   c                    t        |       S r$   )r5   r4   s    r   _weekly_owner_invalid_edit_textz8TelegramWeeklyOwnerMixin._weekly_owner_invalid_edit_text   s    -f55r   c                     t               S r$   )r,   r   r   r   _weekly_owner_route_unavailablez8TelegramWeeklyOwnerMixin._weekly_owner_route_unavailable   s    -//r   c                    t        |       S r$   )r}   )rz   s    r   _telegram_thread_contextz1TelegramWeeklyOwnerMixin._telegram_thread_context   s    &w//r   c                    t        |       S r$   )r   rD   s    r   _real_telegram_thread_idz1TelegramWeeklyOwnerMixin._real_telegram_thread_id   s    &u--r   c                    t        | ||      S r$   )rq   r!   rU   rS   s      r   _weekly_owner_markupz-TelegramWeeklyOwnerMixin._weekly_owner_markup   s     #6?JGGr   c                    t        | ||      S r$   )rs   r   s      r   _weekly_owner_reconcile_markupz7TelegramWeeklyOwnerMixin._weekly_owner_reconcile_markup   s     -V_jQQr   r!   r   rh   
str | None)r!   r   rU   r   rh   InlineKeyboardMarkup | Noner'   r   r(   zIncomingAddress | Nonerh   z#NutritionDraftCallbackDenied | Noner!   r   r.   r   rh   r   r!   r   rh   r   rh   r	   rz   r   rh   ztuple[int | None, bool]rE   zint | bool | Nonerh   z
int | Noner!   r   rU   r   rS   r   rh   r   )r   r   r   __doc__staticmethodr   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s   =" " CG
 
6@
	$
 
 CG
 
6@
	$
 
 @@-C@	,@ @
 ) ) CC/2C	C C
 6 6 0 0 0 0 . . HH.8HFPH	$H H
 RR.8RFPR	$R Rr   r   r   r   r   r   r   )rE   r   rh   z_OwnerControlStatus | str)rE   r   rh   r   r   r   r   )$r   
__future__r   dataclassesr   enumr   rk   typingr   r   r   0gateway.platforms.nutrition_draft_callback_router	   r
   r   ri   r   r   $gateway.platforms.nutrition_coachingr   r   r   r"   r)   r,   r1   r5   r7   rF   rI   rq   rs   r}   r   r   r   r   r   <module>r      s   8 " !  	 5 5  6Q $d#  $
,& ) *' )E.8.8*4.8BL.8 .8b*4BL *J1BR BRr   