
    :jR              
         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Zddl	Z	ddl
mZ ddlmZmZmZ ddlmZ ddlmZ ddlZdZ ej                    d	z  d
z  dz  ZdOdZ ed          Zedz  Zedz  dz  Zedz  dz  Zg dZdddddZdddddddddd	ZdPdZdQdRd%Z dSd(Z!dTd*Z"dUd.Z#dVd2Z$dWd4Z%dXd8Z&dYd:Z'dZd?Z(d[d\dDZ)d]dEZ*d]dFZ+d^dKZ,d_dLZ-d`dMZ.e/dNk    r e0 e.                      dS )aa  YAZIO nutrition sync v2 for JARVIS HealthManager.

- Fetches YAZIO consumed-items for one or more dates.
- Stores normalized item rows, all available nutrient keys, meal/day summaries.
- Scores items/meals/days against local SIGHi-inspired histamine rules.
- Maintains legacy ernaehrung/tagebuch rows for backward compatibility.

Output stays compact: no food lists are printed to chat by default.
    )annotationsN)defaultdict)datedatetime	timedelta)Path)Anyzhttps://yzapi.yazio.com/v15z.hermessecretszyazio_credentials.jsonreturndict[str, str]c                     t          j        t                              d                    } | d         | d         | d         | d         dS )Nzutf-8)encoding	client_idclient_secretusernamepassword)r   r   r   r   )jsonloadsYAZIO_SECRET_FILE	read_text)datas    E/home/agent/.hermes/assets/Gesundheit/scripts/yazio_nutrition_sync.pyload_yazio_credentialsr      sR    :'1171CCDDD+&o.$$	      z%/home/agent/.hermes/assets/Gesundheitzhealth_data.dbscriptszhealth_pipeline.pyznutrition_insights.py)	breakfastlunchdinnersnackunknownenergy.energynutrient.proteinnutrient.carbnutrient.fat)kcal	protein_gcarb_gfat_gr%   gmg)	r!   r"   r#   r$   znutrient.sugarznutrient.fiberznutrient.saltznutrient.sodiumznutrient.saturatedstrc                     t          j        t           di t                      ddid          } |                                  |                                 d         S )Nz/oauth/token
grant_typer      )r   timeoutaccess_token)requestspostYAZIO_BASE_URLr   raise_for_statusr   )resps    r   	get_tokenr6   C   sr    ='''
$&&
*
 
   D 	99;;~&&r   pathtokenparamsdict[str, Any] | Noner	   c                    t          j        t           |  |d| ddd          }|                                 |                                S )NzBearer zde-DE)AuthorizationzAccept-Languager.   )r9   headersr/   )r1   getr3   r4   r   )r7   r8   r9   r5   s       r   api_getr?   P   sa    <!4!!"3E"3"3PP	  D 	99;;r   xfloatc                X    	 | | dk    rdS t          |           S # t          $ r Y dS w xY w)N         )rA   	Exception)r@   s    r   fnumrF   [   sF    9R3Qxx   sss     
))sc           
        | pd                                 } t                              dddddddd          }|                     |          } t	          j        d	d
|           } t	          j        dd
|                                           S )NrC   aeoeueeass)   ä   ö   ü   é   è   à   ßz
[^a-z0-9]+ z\s+)lowerr+   	maketrans	translateresubstrip)rG   repls     r   normalize_textr^   d   s~    	
bA==t$T#TW^bccddD	DA
}c1%%A6&#q!!'')))r   	raw_valueamount_gkeyc                x    t          |           }|dk    rt          ||z  d          S t          ||z  d          S )a1  Scale YAZIO product nutrient values by consumed amount.

    The local legacy sync treated product nutrient macro values as per gram and
    energy.energy as J/g converted to kcal-ish by /1000. Keep that convention for
    compatibility until a fully validated YAZIO nutrient-unit audit is completed.
    r!      )rF   round)r_   r`   ra   vals       r   nutrient_amountrf   l   sB     y//C
oS8^Q'''x###r   dayitemdict[str, Any]c                    t          j        |ddt                    }t          j        | dz   |z                                                                             S )NFTensure_ascii	sort_keysdefault|)r   dumpsr+   hashlibsha256encode	hexdigest)rg   rh   payloads      r   	item_hashrv   y   sK    jET3OOOG>39w.668899CCEEEr   list[dict[str, Any]]c                   t          d|d| i          }i }g }|                    dg           pg D ]}t          |                    d          pd          }i }|r9||vr-	 t          d| |          ||<   n# t          $ r i ||<   Y nw xY w||         }t	          |                    d                    |                    d          pi }fd	|                                D             }	|                    d
t          |                    d          p|                    d          pd          || t          |                    d          pd          t          |                    d          p|                    d          pd|           |                    d          p|                    d          d|                    d          |                    d          "t	          |                    d                    nd |	||d           dD ]:\  }
}|                    |
g           pg D ]}t	          |                    d          p|                    d          pd          |                    d          pi }t          |t                    rd |                                D             ni }dD ]2\  }}||v r)||vr%t	          |                    |                    ||<   3|                    |t          |                    d          pd          t          |                    d          p|                    d          pd          | t          |                    d          pd          t          |                    d          p+|                    d          p|                    d          p|          |                    d          p|                    d          d|                    d          |                    d          "t	          |                    d                    nd ||i d           <|S )Nz/user/consumed-itemsr   products
product_idrC   z
/products/amount	nutrientsc                ~    i | ]9\  }}t          |t          t          t          f          '|t	          ||          :S  )
isinstanceintrA   r+   rf   ).0kvr{   s      r   
<dictcomp>zfetch_items.<locals>.<dictcomp>   sk      D  D  DAblmnqtv{  ~A  qB  cC  cC  DAq&!<<  D  D  Dr   productiddiary_iddaytimer    namezProdukt brandmanufacturerr)   servingserving_quantity)source_typesource_item_idsource_product_iddatummealr   r   r{   amount_unitr   r   r|   raw_item_jsonraw_product_json))simple_productssimple_product)recipe_portionsreciper   c                4    i | ]\  }}|t          |          S r~   )rF   )r   r   r   s      r   r   zfetch_items.<locals>.<dictcomp>   s$    ???TQaa???r   ))energyr!   )r%   r!   )proteinr"   )carbr#   )fatr$   titlerecipe_name)	r?   r>   r+   rE   rF   itemsappendr   dict)rg   r8   diaryproduct_cacheoutrawpidprodnutrients_rawnutrients_scaledbucketr   r|   scaledk_srck_dstr{   s                   @r   fetch_itemsr   ~   s   *EFC=AAE/1M "CyyR((.B  #'',''-2..! 	&-'',)01Cc1C1CU)K)KM#&&  , , ,)+M#&&&, %Dcggh''((--3 D  D  D  DI\I\I^I^  D  D  D

$!#''$--"L377:3F3F"L"MM!$	**7i88((OCGGFOOO?O#?O?OPPXXg&&B$((>*B*Bwwy))EHWWM_E`E`ElSWW-?%@%@ A A Arv)  $
 
 	 	 	 	"  f  99VR((.B 	 	C#''(++Osww7I/J/JOaPPF,,2ICMiY]C^C^f??Y__->->????dfF !n 9 9uC<<E$7$7$($8$8F5MJJ*"%cggdmm&9r":":%()>)>)U#''$--)USU%V%VCGGI..;)<<CGGFOOhswww/?/?h377=CYCYh]hii))DSWW^-D-D "779--ILQcIdIdIpD1C)D)D$E$E$Evz#!$$&     	0 Js   !A88B
	B
consqlite3.ConnectionNonec                0    |                      d           d S )Nz
        CREATE TABLE IF NOT EXISTS sync_state (
            key TEXT PRIMARY KEY,
            value TEXT,
            updated_at TEXT DEFAULT CURRENT_TIMESTAMP
        )
    )execute)r   s    r   ensure_state_tabler      s'    KK  	 	 	 	 	r   r   c           	        t          |          }t          |                     d                    }|D ]}t          |d                   }|rtt          j        dt          j        |          z   dz   |          rGt          |d                   }|d         |g d|         |d         pd	|d
         pdd|d          dc S d d dd	dddS )Nz
        SELECT a.alias, r.canonical_food, r.sighi_score, r.tags, r.confidence, r.notes
        FROM histamine_food_aliases a JOIN histamine_food_rules r ON r.canonical_food=a.canonical_food
        ORDER BY length(a.alias) DESC
    aliasz(^| )z( |$)sighi_scorecanonical_food)greenyelloworangeredtagsrC   
confidencemediumzAlias-Match: )r   r   traffic_lightr   r   reasonr    lowzkein Mapping)r^   listr   rZ   searchescaper   )r   r   naliasesrM   
alias_normscores          r   classify_histaminer      s   tA3;;   	 	 
 
G
   #AgJ//
 		")Hry/D/D$Dx$OQRSS 		-())E"#$4"5$!E!E!Ee!L&	Ro96!G*66     #4)]_ot  AO  P  P  Pr   	max_scorer   r    loadc                b    |dk    rdS | dk    s| dk    s|dk    rdS | dk    s|dk    rdS |rd	S d
S )a  Calibrated aggregate traffic light.

    Item-level SIGHi score 3 stays red at item level, but meal/day aggregates
    should only become red for genuinely high cumulative burden. A single risky
    item in an otherwise small meal is orange, not an apocalypse with cutlery.
    
   r   rc         r      r   r    r   r~   )r   r    r   s      r   score_labelr      sX     rzzuA~~a4199xA~~x y7r   Fforcebooltuple[bool, str]c                   t          | |          }t          j        |ddt                    }t	          j        |                                                                          }t          j	        t                    }t          j        |_        	 t          |           |                    dd|  df                                          }|r)|d         |k    r|sd|  df|                                 S d	 |                    d
| f          D             }|rSd                    d |D                       }	|                    d|	 d|           |                    d|	 d|           |                    d| f           |                    d| f           |                    d| f           |                    d| f           |                    d| f           |sK|                    dd|  d|f           |                                 d|  df|                                 S g }
|D ]}|d         pi }t'          |                    d                    }t'          |                    d                    }t'          |                    d                    }t'          |                    d                    }t+          | |          }|                    d|d         |d         | |d         |d          |                    d!          |d"         |                    d#          pd$|                    d%          |                    d&          ||||t          j        |d'         ddt                    t          j        |d(         ddt                    |f          }t-          |j                  }|
                    |           t3          |                                          D ]R\  }}|                    d)||t'          |          t6                              |          t          |          f           St9          ||d                    }|                    d*||d+         |d,         |d-         |d.         |d/         |d0         f           |d           d1|d"         d$d2|d$d3|d$d4|d$d5|d$d6}|                    d7| |d         |d8d9|d:          d;|d          f           t;          ||            t=          ||            |                    d<d|  d|f           |                                 d|  d=t?          |
           d>f|                                 S # |                                 w xY w)?NFTrk   z(SELECT value FROM sync_state WHERE key=?zyazio:z:v2:fingerprintvalueu   : unverändertc                    g | ]
}|d          S )r   r~   )r   rs     r   
<listcomp>zsync_date.<locals>.<listcomp>   s    xxxqtxxxr   zCSELECT id FROM nutrition_items WHERE datum=? AND source='yazio_api',c              3     K   | ]}d V  dS )?Nr~   )r   _s     r   	<genexpr>zsync_date.<locals>.<genexpr>   s"      ********r   z7DELETE FROM nutrition_item_nutrients WHERE item_id IN ()z9DELETE FROM nutrition_histamine_scores WHERE item_id IN (z@DELETE FROM nutrition_items WHERE datum=? AND source='yazio_api'z0DELETE FROM nutrition_meal_summary WHERE datum=?z4DELETE FROM nutrition_daily_summary_v2 WHERE datum=?zXDELETE FROM ernaehrung WHERE datum=? AND COALESCE(notizen,'') LIKE '%Quelle: YAZIO API%'zJDELETE FROM tagebuch WHERE datum=? AND COALESCE(verknuepft,'')='yazio_api'z
                INSERT INTO sync_state(key,value,updated_at) VALUES(?,?,CURRENT_TIMESTAMP)
                ON CONFLICT(key) DO UPDATE SET value=excluded.value, updated_at=CURRENT_TIMESTAMP
            u   : keine Einträger|   r!   r"   r#   r$   ar  
                INSERT INTO nutrition_items(source, source_item_id, source_product_id, datum, meal, name, brand, amount, amount_unit, serving, serving_quantity,
                    kcal, protein_g, carb_g, fat_g, raw_item_json, raw_product_json, item_hash, updated_at)
                VALUES('yazio_api',?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP)
            r   r   r   r   r   r{   r   r)   r   r   r   r   zlINSERT OR REPLACE INTO nutrition_item_nutrients(item_id,nutrient_key,value,unit,raw_value) VALUES(?,?,?,?,?)z
                INSERT OR REPLACE INTO nutrition_histamine_scores(item_id,canonical_food,sighi_score,traffic_light,tags,confidence,reason,scored_at)
                VALUES(?,?,?,?,?,?,?,CURRENT_TIMESTAMP)
            r   r   r   r   r   r    ( g):  kcal,  g Protein,  g KH,  g FettzUINSERT INTO ernaehrung(datum,mahlzeit,beschreibung,wirkung,notizen) VALUES(?,?,?,?,?)rC   zQuelle: YAZIO API; Typ: r   z; ID: z
            INSERT INTO sync_state(key,value,updated_at) VALUES(?,?,CURRENT_TIMESTAMP)
            ON CONFLICT(key) DO UPDATE SET value=excluded.value, updated_at=CURRENT_TIMESTAMP
        z: u"    Einträge importiert/aktualisiert) r   r   rp   r+   rq   rr   rs   rt   sqlite3connectDB_PATHRowrow_factoryr   r   fetchoneclosejoincommitrF   r>   rv   r   	lastrowidr   sortedr   NUTRIENT_UNITSr   recompute_summariesmake_legacy_diarylen)rg   r8   r   r   ru   fpr   oldidsqinserted_idsitr|   r%   r   r   r   ihashcuritem_idra   re   hsdescs                           r   	sync_dater     s   U##EjUdCPPPG	((	)	)	3	3	5	5B
/'
"
"CkCO<3kkDGdPSGdGdGdFfggpprr 	13w<2%%e%S0000p 			k yxS[[)nqtpvwwxxx 	_**c*****AKKVRSVVVX[\\\KKXTUXXXZ]^^^VY\X^___FOOOJSFSSSnqtpvwww`cfbhiii 	4KK  03///46 6 6 JJLLLS3333H 			E #% 	] 	]B;-2I	o6677D9==);<<==G	o6677Dy}}^4455Cc2&&E++  %&+>(?bjRTU[R\^`^d^del^m^moqrzo{}  ~D  ~D  ER  ~S  ~S  ~Z  WZ  \^  \b  \b  cl  \m  \m  oq  ou  ou  vH  oI  oI  KO  QX  Z^  `c  ei  eo  pr  sB  pC  RW  cg  qt  eu  eu  eu  w{  wA  BD  EW  BX  gl  x|  FI  wJ  wJ  wJ  LQ  R	S SC
 #-((G((("9??#4#455 J JS  K  NU  WZ  \`  ad  \e  \e  gu  gy  gy  z}  g~  g~  @C  DG  @H  @H  MI  J  J  J  J#CF44BKK  2./M1BBDWY[\bYceghteuwy  {C  xD  EF F F j||BxL|||||||||_c|||nq||||DKKoruwy  {A  xB  DH  JL  N[  ik  ly  iz  N[  N[  BD  EX  BY  N[  N[  r\  ]  ]  ]  ]C%%%#s###  ,s+++R0	2 	2 	2 	

TTs<00TTTT				s   AU5 8D!U5 .L2U5 5Vc                
   t          |                     d|f                    }t          |                     d|f                    }t          d           }|D ]
}|d         pd}||         }|dxx         dz  cc<   |dxx         t          |d                   z  cc<   |d	xx         t          |d
                   z  cc<   |dxx         t          |d                   z  cc<   |dxx         t          |d                   z  cc<   |d         |dxx         dz  cc<   t	          |d                   }|d                             |           |dxx         |z  cc<   |D ]?}||d         pd         d         |d         xx         t          |d                   z  cc<   @dddddt          t                    g ddd	}	|                                D ]\  }}t          |d         pdg          }
t          |
|d         |d                   }|                     d||t          |d         d          t          |d	         d          t          |d         d          t          |d         d          t	          |d                   t          j        t          t          |d                                                             d          t          |d         d          |f
           |	dxx         |d         z  cc<   |	d	xx         |d	         z  cc<   |	dxx         |d         z  cc<   |	dxx         |d         z  cc<   |	dxx         t	          |d                   z  cc<   |	dxx         |d         z  cc<   |	dxx         |d         z  cc<   |	d                             |d                    |d                                         D ]\  }}|	d         |xx         |z  cc<   t          |	d         pdg          }
t          |
|	d         |	d                   }|                     d|t          |	d         d          t          |	d	         d          t          |	d         d          t          |	d         d          t	          |	d                   t          j        t          t          |	d                                                             d          t          |	d         d          |
|	d         |f           d S )Na	  
        SELECT i.id, i.meal, i.kcal, i.protein_g, i.carb_g, i.fat_g,
               h.sighi_score, h.traffic_light
        FROM nutrition_items i
        LEFT JOIN nutrition_histamine_scores h ON h.item_id=i.id
        WHERE i.datum=? AND i.source='yazio_api'
    z
        SELECT i.meal, n.nutrient_key, SUM(n.value) value
        FROM nutrition_items i JOIN nutrition_item_nutrients n ON n.item_id=i.id
        WHERE i.datum=? AND i.source='yazio_api'
        GROUP BY i.meal, n.nutrient_key
    c            
     >    dddddt          t                    g ddd	S )NrD   r   	r%   r   r   r   r   r|   scoresr    r   )r   rA   r~   r   r   <lambda>z%recompute_summaries.<locals>.<lambda>B  sO    SSV^ahktu  CN  OT  CU  CU  _a  lm  ux  >y  >y r   r   r    r   r   r%   r   r&   r   r'   r   r(   r   r  r   r|   nutrient_keyr   rD   r   r  z
            INSERT OR REPLACE INTO nutrition_meal_summary(datum,meal,kcal,protein_g,carb_g,fat_g,item_count,nutrient_json,histamine_score,histamine_label,updated_at)
            VALUES(?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP)
        F)rl   a  
        INSERT OR REPLACE INTO nutrition_daily_summary_v2(datum,kcal,protein_g,carb_g,fat_g,item_count,nutrient_json,histamine_score,histamine_max,histamine_unknown_count,histamine_label,updated_at)
        VALUES(?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP)
    )r   r   r   rF   r   r   rA   r   maxr   rd   r   rp   r   r   extend)r   rg   	item_rowsnutrient_rowsby_mealr   mbsc	day_totalr   labelr   r   s                 r   r   r   4  s   S[[ "    I  &
    M *5  6y  6y  *z  *zG P PfI"AJ	'


a


	&			T!F)__$			a	llld1[>6J6J&JlllAfIIIY]^_`h^iYjYjLjIIIlmnsltltltx|}~  @G  ~H  yI  yI  mIltltlt]#iLLLALLLLQ}%&&B((:(:2(>(>(>&			R				 \ \&	&Y'4Q~5FGGG4PQRYPZK[K[[GGGGc3qU`afUgUgqs~  HK  L  LI 	K 	K1(*s++	Iq|QvY??  1eAfIa((%)Q*?*?qyQRASASUZ[\]b[cdeUfUfhklmnulvhwhwy}  zD  EI  JP  QR  S^  Q_  Qe  Qe  Qg  Qg  Jh  Jh  Ei  Ei  x}  z~  z~  z~  @E  FG  HN  FO  PQ  @R  @R  TY  Z	[ 	[ 	[ 	&QvY&	)(<(<(<)(L(<(<(<iX^N_N_N_cdekclNlN_N_N_nwx}n~n~n~  CD  EJ  CK  oKn~n~n~'c!G*oo-y/C/C/Cq|/S/C/C/CU^_eUfUfUfjklrjsUsUfUfUfu~  @H  vI  vP  vP  QR  S[  Q\  v]  v]  v]kN((**JJDAqIk,B1,E,E,E,J,E,E,E,EJIh'.A3//I	9Y#769JKKEKK  uYv&q))591Ea+H+H%PYZ`PabcJdJdfkluv{l|}~ff  BE  FO  PW  FX  BY  BY  [_  [e  fj  kq  r{  |G  rH  rN  rN  rP  rP  kQ  kQ  fR  fR  af  [g  [g  [g  in  ox  y  o@  AB  iC  iC  EN  PY  Zc  Pd  fk  
lm m m m mr   c                   t          |                     d|f                    }|                     d|f                                          }g }|D ]}dddddd                    |d	         pd
d          }|                    d|d          d| d|d          dt          |d                   ddt          |d                   ddt          |d                   ddt          |d                   ddt          |d                   dd           |r\d| dd                    |          z   d|d         d d!|d         d d"|d         d d#|d         d d$|d%          d|d&         d d'z   }nd| dd                    |          z   }t          j        |	                                          
                                }|                     d(|d)d*| |d+d,d-| f           d S ).Na  
        SELECT i.meal,i.name,i.amount,i.kcal,i.protein_g,i.carb_g,i.fat_g,h.traffic_light,h.canonical_food,h.sighi_score
        FROM nutrition_items i LEFT JOIN nutrition_histamine_scores h ON h.item_id=i.id
        WHERE i.datum=? AND i.source='yazio_api'
        ORDER BY CASE i.meal WHEN 'breakfast' THEN 1 WHEN 'lunch' THEN 2 WHEN 'dinner' THEN 3 WHEN 'snack' THEN 4 ELSE 9 END, i.id
    z6SELECT * FROM nutrition_daily_summary_v2 WHERE datum=?u   🟢u   🟡u   🟠u   🔴u   ⚫)r   r   r   r   r    r   r    z- [r   z] rV   r   r   r{   r)   r   r%   r   r&   r   r'   r   r(   r   u   YAZIO-Ernährung z


z	

Summe: z.1fz kcal | z g Protein | z g Kohlenhydrate | z g Fett | Histamin: histamine_labelhistamine_scorer   zx
        INSERT INTO tagebuch(datum,kategori,titel,inhalt,wirkung,verknuepft,notizen)
        VALUES(?,?,?,?,?,?,?)
    
ernaehrungu   YAZIO-Ernährung: rC   	yazio_apiz*Automatisch via YAZIO API v2; fingerprint=)r   r   r   r>   r   rF   r   rq   rr   rs   rt   )	r   rg   rowstotalslinesr   lightsummaryr   s	            r   r   r   a  s    
    D [[QTWSYZZcceeFE N NfW\]]aabcdsbt  cB  yB  DI  J  J  M1V9  M  M  M  M&	  M  MT!H+=N=N  M  M  MW[\]^d\eWfWf  M  M  Mquvw  yD  wE  rF  rF  M  M  M  VZ  [\  ]e  [f  Vg  Vg  M  M  M  rv  wx  y@  wA  rB  rB  M  M  M  M  	N  	N  	N  	N C/c///$))E2B2BB  FeSYZ`Sa  Fe  Fe  Feou  wB  pC  Fe  Fe  Fe  V\  ]e  Vf  Fe  Fe  Fe  E  FM  N  Fe  Fe  Fe  hn  o@  hA  Fe  Fe  EK  L]  E^  Fe  Fe  Fe  Fe  e/c///$))E2B2BB	((	)	)	3	3	5	5BKK  |7#77"k  TE  AC  TE  TE  
FG G G G Gr   startr   end
list[date]c                    || k     r|| }} g }| }||k    r.|                     |           |t          d          z  }||k    .|S )Nr   days)r   r   )r  r   r$  ds       r   	dateranger&  x  s]    
U{{%sDA
s((A	YA s(( Kr   c                P    t          j        | d                                          S )Nz%Y-%m-%d)r   strptimer   )rG   s    r   	parse_dayr)    s!    Q
++00222r   c                    t          j                    } |                     dd           |                     ddd           |                     dd	d
           |                     dt          d           |                     dd           |                     ddd           |                     dd           |                                 }|j        rt          |j                  g}n|j        s|j        rGt          |j        p|j                  }t          |j        p|j                  }t          ||          }n}|j
        r?t          j                    }|t          |j
        dz
            z
  }t          ||          }n7t          j                    t          j                    t          d          z
  g}t                      }g }g }|D ]p}t          |                                ||j                  \  }	}
|                    |
           |	r|                    |
           |j        rt'          |
           q|r|j        rt+          j        t.          j        t3          t4                    gddd          }|j        dk    r8t'          |j        p|j        p	d|j         t.          j                   |j        S t+          j        t.          j        t3          t<                    dgddd          }|j        dk    r8t'          |j        p|j        p	d|j         t.          j                   |j        S |r2t'          d d!                    |          z   |j        rd"nd#z              nO|j        rHt'          d$d!                    |d d%                   z   tA          |          d%k    rd&nd#z   d'z              dS )(Nz--datezsingle YYYY-MM-DD date)helpz--from	from_datezbackfill start YYYY-MM-DD)destr+  z--toto_datezbackfill end YYYY-MM-DDz--daysz!backfill last N days ending today)typer+  z--force
store_true)actionz--dashboardzrefresh dashboard after changes)r1  r+  z	--verboser   r#  )r   T   )textcapture_outputr/   r   zNutrition insights failed with )file	dashboardzDashboard refresh failed with z#YAZIO-Nutrition-Sync aktualisiert: z; z; Dashboard aktualisiert.rC   u)   YAZIO-Nutrition-Sync: keine Änderungen (   z ...r   )!argparseArgumentParseradd_argumentr   
parse_argsr   r)  r,  r.  r&  r$  todayr   r6   r  	isoformatr   r   verboseprintr6  
subprocessrunsys
executabler+   INSIGHTS
returncodestderrstdoutPIPELINEr   r   )apargstargetsr  r   r8   changednotesr%  didmsginsightsdashs                r   mainrR    s   		 	"	"BOOH#;O<<<OOH;5POQQQOOF1JOKKKOOH3-POQQQOOIlO333OOM,=^O___OOKO555==??Dy 
CTY''(	 C4< C$.8DL99677E3''	 CjllC)Q*G*G*G$GEE3'':<<	q0A0A0A!ABKKEGE  Q[[]]EDDDSS 	 NN3< 	#JJJ #4> #>3>3x=="A]aknooo!##(/oX_o8oZbZm8o8ovy  wA  B  B  B  B&&~s~s8}}kJQUfjtwxxx?a$+bb0bQUQ`0b0bilistttt?" }3dii6H6HHkoky  MBLgLg  @B  C  	D  	D  	D  	D	 }9DIIeBQBi<P<PP^abg^h^hkl^l^lTZTZrtux{{|||1r   __main__)r   r   )r   r+   )N)r7   r+   r8   r+   r9   r:   r   r	   )r@   r	   r   rA   )rG   r+   r   r+   )r_   r	   r`   rA   ra   r+   r   rA   )rg   r+   rh   ri   r   r+   )rg   r+   r8   r+   r   rw   )r   r   r   r   )r   r   r   r+   r   ri   )r   r   r    r   r   rA   r   r+   )F)rg   r+   r8   r+   r   r   r   r   )r   r   rg   r+   r   r   )r  r   r   r   r   r!  )rG   r+   r   r   )r   r   )1__doc__
__future__r   r8  rq   r   rZ   r   r@  rB  collectionsr   r   r   r   pathlibr   typingr	   r1   r3   homer   r   BASEr   rH  rD  MEALS
MACRO_KEYSr   r6   r?   rF   r^   rf   rv   r   r   r   r   r  r   r   r&  r)  rR  __name__
SystemExitr~   r   r   <module>r_     s    # " " " " "    				      



 # # # # # # . . . . . . . . . .             .DIKK)+i7:RR     t344
!
!)22)55<<< #	 
 
 

' 
' 
' 
'       * * * *
$ 
$ 
$ 
$F F F F
< < < <~	 	 	 	P P P P,   $B B B B BJ+m +m +m +mZG G G G.   3 3 3 30 0 0 0f z
*TTVV

 r   