
    ;i                        d Z ddlmZ ddlmZmZ ddlZddlZddlm	Z	 ddl
Z
ddlmZmZmZmZ  e
j                   d      ZddZdd	Zdd
dd	 	 	 	 	 	 	 	 	 ddZdgZy)zVoucher normal-price consensus loader/cache.

Extracted from `Inventory_Search_Folder.voucher_search` so web/desktop callers
can reuse the same logic from a standalone `Boot_Features` module.
    )annotations)CounterdefaultdictN)Path)DictListOptionalTuplez^\s*(?P<style>\d{4,6})\s*,.*?,\s*(?P<normal>\d+(?:\.\d{2})?)\s*,,\s*(?P<discount>\d+(?:\.\d{1,2})?)\s*,\s*(?P<discounted>\d+(?:\.\d{2})?)\bc                    	 t        |       j                         j                  dz  }|dz  j                         S # t        $ r- t        |       j                         dz  j                         cY S w xY w)Nconfigz"voucher_price_consensus_cache.jsonz#.voucher_price_consensus_cache.json)r   resolveparent	Exception)voucher_rootcfgs     (Boot_Features/voucher_price_consensus.py_price_consensus_cache_pathr      so    `< ((*11H<::CCEE `\"**,/TT]]__`s   8; 3A10A1c                Z   g }t        |       j                         j                         }|j                         s|S 	 t	        j
                  |      D ]  \  }}}	 t        |      }||k(  rdnt        |j                  |            }|j                         }t        t        |dt        |j                  dz                    }	|j                  ||	f       |j                  t        j                          	 |j                  d        |S # t        $ r Y w xY w# t        $ r g cY S w xY w)N.st_mtime_nsi ʚ;)keyc                (    | d   j                         S )Nr   )casefold)ts    r   <lambda>z,_compute_voucher_dir_stamp.<locals>.<lambda>4   s    1Q4==?     )r   
expanduserr   existsoswalkstrrelative_tostatintgetattrst_mtimeappendsortr   r   )
r   outrootdirpathdirnames_prelstmtime_nss
             r   _compute_voucher_dir_stampr2   "   s   !#C((*224D;;=
$&GGDM 		 GXqM$YcCd0C,DVVXwr=#bkkM>Y:Z[\

C?+#,,/		 HH*H+J   	s6   D BD5D 	DD DD D*)D*   F)valid_styles	min_agreeforce_rebuildc               n   t        |       j                         j                         }t        |      }t	        |      }|s7	 |j                         r%t        j                  |j                  d            }t        |t              rt        |j                  dd            dk(  rt        |j                  dd            t        |      k(  r|j                  d      |D 	
cg c]	  \  }	}
|	|
g c}
}	k(  rt        |j                  d	      t              rc|j                  d	i       j                         D ci c]7  \  }}t        |      r't        |xs d      dkD  rt        |      t        |      9 c}}S t#        t$              }	 t'        |j)                  d
            }|D ]  }	 i }|j+                  ddd      5 }|D ]g  }t,        j/                  |xs d      }|s ||j1                  d            }|||vr=	 t        |j1                  d            }|dk  r^||vsc|||<   i 	 ddd       |j                         D ]  \  }}||   |xx   dz  cc<     i }|j                         D ]e  \  }}|s	|j3                  d      }|d   \  }}t5        |      dkD  r|d   d   nd}|t        |      k\  sI||kD  sOt        |      |t        |      <   g 	 |j6                  j9                  dd       dt        |      |D 	
cg c]	  \  }	}
|	|
g c}
}	|d}|j;                  t        j<                  |dd      d       |S c c}
}	w c c}}w # t         $ r Y w xY w# t         $ r g }Y w xY w# t         $ r Y w xY w# 1 sw Y   ZxY w# t         $ r Y w xY wc c}
}	w # t         $ r Y |S w xY w)zBBuild/load cached normal-price consensus from voucher `.md` files.zutf-8)encodingversionr      r*    	dir_stamppricesz*.mdrignore)r8   errorsstyleNnormalr3   T)parentsexist_ok)r9   r*   r<   r=   )indent	sort_keys)r   r   r   r   r2   is_filejsonloads	read_text
isinstancedictr$   getr!   itemsfloatr   r   r   sortedrglobopen_VOUCHER_PRICE_LINE_REmatchgroupmost_commonlenr   mkdir
write_textdumps)r   normalize_styler4   r5   r6   r*   
cache_pathcurrent_stamppayloadabkvstyle_price_countsmd_filesr.   	file_seenflnmnormnormal_pricer=   counterranked	top_price	top_countsecond_counts                               r   #load_voucher_normal_price_consensusrp   8   s    ((*224D,T2J.t4M	!!#**Z%9%97%9%KLw-GKK	156!;GKK34D	AK04V1aV4VV"7;;x#8$? %,KK"$=$C$C$E Aqq6eAFma&7 Aa(  5@4H$**V,-  	*,Igh? 71 7B.44RX2>A *1777+;<D#/D4L !',QWWX->'? $q( 9,*6	$77" '0oo&7 <"l"4(6!;6<)2  "F+113 1g$$Q'%ay	9'*6{Qvay|AI&9|+C %i 0F3t91
t<I-:;TQ1a&;	
 	djjdKV]^ M 5W
  		   % ! !7 7&  		$ <  Ms   B M "M0AM 8<M4M M" (N>A N?M4
N$N,0N-N' N!
0N' M 	MM"M10M14	N	=N N	NN		N	NN!N' '	N43N4rp   )r   r   returnr   )r   r   rq   zList[Tuple[str, int]])
r   r   r4   zOptional[set[str]]r5   r$   r6   boolrq   zDict[str, float])__doc__
__future__r   collectionsr   r   rH   r   pathlibr   retypingr   r   r	   r
   compilerS   r   r2   rp   __all__ r   r   <module>r|      s    # ,  	  	 . . $) `4 (,TT %	T
 T T Tn 1
1r   