+
    ] i$                     .   R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RI	H
t
HtHtHtHtHtHtHtHtHtHt ]! ]4      P,                  R,          R,          t]! ]4      P,                  R,          t]! ]4      P,                  R,          t]! ]4      P,                  R,          R,          tR	 R
 ltR R lt]]]3,          t] ]!]3,          t"R R lt#R R lt$R R lt%R R lt&R R lt'R R lt(R R lt)R R lt*R R lt+],R8X  d
   ]+! 4        R# R# ) u  
Process top5-players.csv into per-squad JSON files organised by league,
plus a consolidated leagueData.json with standings.

Output structure:
  src/Data/squads/<league_slug>/<squad_slug>.json
  src/Data/leagueData.json

Each squad JSON:
  { id, name, colors, money, players: [RosterPlayer, …] }

Player stats are randomly generated on a 1-10 scale using position-aware
distributions so that, e.g., a CB gets high tackling but low finishing.
N)Path)
ARCHETYPES	BIG_CLUBSBUDGET_TIERSLEAGUESLEAGUE_LOGO_DIRSLOGO_NAME_OVERRIDESPOSITION_POOLSSECONDARY_POSITIONSSQUAD_COLORSSTAT_PROFILESSUMMARY_TEMPLATES	ToProcessztop5-players.csvsquadszleagueData.jsonsquads_logosc                0    V ^8  d   QhR\         R\         /# )   csv_posreturnstr)formats   "?/Users/brenodesouza/Code/FutSim/data_process/process_players.py__annotate__r   -   s      3 3     c                     V P                  4       p\        P                  ! V\        P                  ! R 4      4      p\        P                  ! V4      # )MF)stripr	   getrandomchoice)r   keypools   &  r   pick_primary_positionr#   -   s9    
--/Cc>#5#5d#;<D==r   c                F    V ^8  d   QhR\         R\        \         ,          /# )r   primaryr   )r   list)r   s   "r   r   r   3   s        C  DI  r   c                 x    \         P                  ! V . 4      pV'       g   V .# \        P                  ! V4      pW.# )N)r
   r   r   r    )r%   extras	secondarys   &  r   pick_positionsr*   3   s6     $$Wb1Fyf%Ir   c                R    V ^8  d   QhR\         R\        \         \        3,          /# r   primary_posr   )r   dictint)r   s   "r   r   r   A   s"       S#X r   c                     \         P                  ! V \         R ,          4      p/ pVP                  4        F6  w  pw  rE\        P                  ! WE4      p\        ^\        ^
V4      4      W#&   K8  	  V# )CM)r   r   itemsr   randintmaxmin)r-   profilestatsattrlohivals   &      r   generate_statsr<   A   s]    (,,[-:MNGE!--/hrnnR$!SS\* * Lr   c                0    V ^8  d   QhR\         R\         /# )r   posr   r   )r   s   "r   r   r   M   s        r   c                 r    V R 8X  d   R # V R9   d   R# V R9   d   R# V R	9   d   R# V R
9   d   R# V R9   d   R# R# )GKCBFBr   AMWGFW)rA   )RBLBRWBLWB)CDMr1   )rC   )LMRMLWRW )r>   s   &r   _trait_pool_keyrP   M   sF    
d{
g~
((
m
g~
&&r   c                0    V ^8  d   QhR\         R\        /# r,   )r   r.   )r   s   "r   r   r   ]   s     8 8# 8$ 8r   c                     \         P                  ! \        P                  ! V \        R ,          4      4      p\	        V 4      p\         P                  ! \
        V,          4      pRVRV/# )r1   summary	archetype)r   r    r   r   rP   r   )r-   rT   pool_keyrS   s   &   r   generate_profilerV   ]   sM    jnn[*T:JKLI{+Hmm-h78GwY77r   c                0    V ^8  d   QhR\         R\         /# )r   namer   r   )r   s   "r   r   r   f   s      # # r   c                     \         P                  ! R V 4      pVP                  RR4      P                  R4      p\        P
                  ! RRVP                  4       4      P                  R4      pV# )NFKDasciiignore
[^a-z0-9]+_)unicodedata	normalizeencodedecoderesublowerr   )rX   nfkd
ascii_textslugs   &   r   to_slugri   f   sZ      .DWh/66w?J66-j&6&6&89??DDKr   c                0    V ^8  d   QhR\         R\         /# )r   	full_namer   r   )r   s   "r   r   r   m   s     - - - -r   c                 d    V P                  4       P                  4       pV'       d
   VR,          # T # )   )r   split)rk   partss   & r   extract_last_namerq   m   s(    OO##%E59,9,r   c                <    V ^8  d   QhR\         R\         R\        /# )r   clubleaguer   )r   r/   )r   s   "r   r   r   r   s!      s C C r   c                 
   \         P                  ! VR4      w  r#V \        9   d1   \        P                  ! \        VR,          4      V4      pVR,          # \        P                  ! V\        VR,          4      4      pVR,          # )   g333333?i@B )rv      )r   r   r   r   r3   r/   )rs   rt   r9   r:   budgets   &&   r   squad_budgetry   r   sh    fi0FByBHr2 I CSM2Ir   c                0    V ^8  d   QhR\         R\         /# )r   rs   r   r   )r   s   "r   r   r   }   s     E ES ES Er   c                   V \         9   d   \         V ,          # \        P                  ! RV 4      pVP                  RR4      P	                  R4      p\
        P                  ! RRVP                  4       4      P                  R4      # )zBConvert a club name to the hyphenated stem used in logo filenames.rZ   r[   r\   r]   -)	r   r_   r`   ra   rb   rc   rd   re   r   )rs   rf   rg   s   &  r   
_logo_stemr}   }   sj    """4((  .DWh/66w?J66-j&6&6&89??DDr   c                J    V ^8  d   QhR\         R\         R\        R,          /# )r   rs   league_slugr   N)r   r   )r   s   "r   r   r      s%      C c dTk r   c                   \         P                  ! V4      pV'       g   R# \        V 4      pV FV  p\        V,          pVP	                  R4       F1  pVP
                  P                  VR,           4      '       g   K-  Vu u # 	  KX  	  R# )z@Return the SVG source path for *club* in *league_slug*, or None.Nz*.svg.)r   r   r}   	LOGOS_DIRglobrX   
startswith)rs   r   logo_dir_namesstemlogo_dir_namelogo_dirsvg_files   &&     r   	find_logor      sl    %))+6NdD'}, g.H}}''s
33 / (
 r   c                    V ^8  d   QhRR/# )r   r   NrO   )r   s   "r   r   r      s     tO tOd tOr   c                  N
   \         P                  ! ^*4       / p \        \        RR7      ;_uu_ 4       p\        P
                  ! V4      pV FF  pVR,          pVR,          pV\        9  d   K"  WE3pV P                  V. 4      P                  V4       KH  	  RRR4       ^ p^ p^ p	/ p
\        V P                  4       4       EF  w  w  rp\        V,          pVR,          p\        V4      pV RV 2p/ pV F^  pVR,          p\        VR	,          ;'       g    ^ 4      pVV9  g+   \        VV,          R	,          ;'       g    ^ 4      V8  g   KY  VVV&   K`  	  \        VP                  4       4      p. pV EF$  pV	^,          p	VR
,          p\        V4      p\!        V4      pVP#                  RR4      ;'       g    RpV'       g.   R\%        VP#                  RR4      ;'       g    R4      ,
          pM=RV9   d#   \%        VP'                  R4      ^ ,          4      pM\%        \        V4      4      pRRV	R 2R\)        VR,          4      RVRVR\         P*                  ! RR.^P^.R7      ^ ,          RVR\-        V4      R\/        V4      /pVP                  V4       EK'  	  \0        P"                  ! VRR.4      p\2        V,          pVP5                  R R R!7       Rp\7        W4      p V '       d-   VV R"2,          p!\8        P:                  ! V V!4       R#V R$V R"2pRVRVR%VR&VR'\=        W4      R(V/p"VV R)2,          p#\        V#R*RR7      ;_uu_ 4       p\>        P@                  ! V"V^R+R,7       RRR4       V
P                  V. 4      P                  V"4       V^,          pV\C        V4      ,          pV'       d   R-MRp$\E        R.V R$V R/\C        V4       R0V$ 24       EK  	  . p%\        P                  ! 4        F  w  p&p'V
P#                  V&. 4      p(V( U)u. uF1  p)RV)R,          RV)R,          R%V)R%,          R&V)P#                  R&4      /NK3  	  p*p)V%P                  RV'R,          RV'R,          R1V'R1,          R2R3R4V*/4       K  	  \        \F        R*RR7      ;_uu_ 4       p\>        P@                  ! V%V^R+R,7       RRR4       \E        R5\C        V%4       R624       \E        R7V R8V R924       R#   + '       g   i     EL[; i  + '       g   i     EL; iu up)i   + '       g   i     Li; i):*   zutf-8)encodingCompSquadNrh   r^   PlayerMinPosAge i  Born2000r|   idplayer_04drX   agesquadIdpreferredFootrightleft)weights	positionsr7   r6   z#888888z#FFFFFFT)parentsexist_okz.svgzsquads//colorslogomoneyplayersz.jsonwF)indentensure_asciiu    🖼u     ✓ z.json  (z	 players)countryseasonz2025-26	standingsu   
  ✓ leagueData.json  (z	 leagues)u
   
Done — z	 squads, z players total.)$r   seedopenCSV_PATHcsv
DictReaderr   
setdefaultappendsortedr2   ri   floatr&   valuesr#   r*   r   r/   ro   rq   choicesr<   rV   r   
OUTPUT_DIRmkdirr   shutilcopy2ry   jsondumplenprintLEAGUE_DATA_PATH)+
squads_rawfreaderrowcomp
squad_namer!   total_squadstotal_playersplayer_counterleague_squadsrt   rs   rows
league_cfgr   	club_slugsquad_idseenrX   minsunique_rowsr   r   r%   r   age_strr   playerr   out_dir
logo_fieldlogo_src	logo_dest	squad_objout_pathlogo_tagleague_data
league_keycfgclubscr   s+                                              r   mainr      s   
KKO 57J	h	)	)Q"Cv;DWJ7"$C!!#r*11#6  
* LMN ,.M &z'7'7'9 :V_
 (DM	!]!I;/ !#Cx=DUq)D45dE):)?)?a#@4#G T
	 
 4;;=) CaN%jG+G4G&w/IggeR(..BGS!8!B!BFCC'--,Q/0%.) s34)#h-8s8&0ABPR8!TUV!WY0+G4	F NN6"/ 2 !!$I(>?{*dT2 "&
T/YKt"44ILL9-";-q4@J (DfJ\$/w
	 	{%00(C'22aIIi15A 3 	  ,33I>W%(7b{m1YKxG~YxjYZQ !;V !K"==?
C!!*b1 
 $6Hak6STSXSXY_S`a 	 
 	CKCKs9~i
 	 + 
g	6	6!		+q? 
7	&s;'7&8	
BC	K~Y}o_
MN_ 
*	)	)b 322
 
7	6s*   A#S'S;7TT'S8	;TT$	__main__)-__doc__r   r   r   rc   r   r_   pathlibr   constants_loaderr   r   r   r   r   r   r	   r
   r   r   r   __file__parentr   r   r   r   r#   r*   tupler/   	StatRanger.   r   StatProfiler<   rP   rV   ri   rq   ry   r}   r   r   __name__rO   r   r   <module>r      s       	       >  ;.1CC(^""X-
>((+<< N!!K/.@	  #s(O	3	>" 8-
E tOn zF r   