
    ng_                     V    d dl Z d dlZd dlZd dlmZmZmZ d dlmZ  G d d      Z	d Z
y)    N)DictAnySet)Pathc                   2    e Zd Zd Zd Zdeeef   defdZ	y)GameSettingsValidatorc                     t        t              j                  }|dz  dz  dz  dz  | _        t	               | _        i | _        	 | j                          y # t        $ r}t        d|         d }~ww xY w)Nsrc
componentsgameszgameSettings.jszError initializing validator: )
r   __file__parentsettings_pathsetr   global_settingsload_settings	Exceptionprint)selfcurrent_dires      TC:\Users\fvalley\Desktop\MWHGitProjects\games\idleremake2\game_settings_validator.py__init__zGameSettingsValidator.__init__   ss    8n++(50<?'IL]]U
!	  	21#67	s   A 	A2A--A2c                 6   	 t        | j                  dd      5 }|j                         }ddd       j                  dd      }t	        j
                  d|      }|st        d      d	}t	        j                  ||j                  d
            }|D ]B  }|j                  d
      }|dk7  s| j                  j                  |j                                D t        d| j                          y# 1 sw Y   xY w# t        $ r}t        d|         d}~ww xY w)z(Load the games list from gameSettings.jsrzutf-8)encodingN
 zGAME_SETTINGS\s*=\s*{(.*)};\s*$z#Could not find GAME_SETTINGS objectz([A-Z]+):\s*{\s*ICON:   GLOBALzFound games: zError loading settings: )openr   readreplaceresearch
ValueErrorfinditergroupr   addlowerr   r   )	r   filecontentsettings_matchgame_patterngames_matchesmatch	game_namer   s	            r   r   z#GameSettingsValidator.load_settings   s    	d((#@D))+ A oodC0GYY'I7SN! !FGG 4LKKn6J6J16MNM&!KKN	(JJNN9??#45 '
 M$**./% A@(  	,QC01	s5   C; C/A?C; +AC; /C84C; ;	DDD	save_datareturnc                    	 |j                  di       }h d}|t        |j                               z
  }|rt        d|       |j                  di       }| j                  D ];  }| d}t        |j                  |d      t        t        f      r/t        | d       |j                  di       }| j                  D ]L  }||vrt        d	|       ||   }	h d
}
|
t        |	j                               z
  }|s=t        d| d|        |j                  di       }| j                  D ]L  }||vrt        d|       ||   }h d}|t        |j                               z
  }|s=t        d| d|        |j                  di       }| j                  D ]N  }||vrt        d|       ||   }t        |j                  dd      t        t        f      rAt        d| d       t        |j                  dd      t              st        d      |j                  dd      j                         }|r|| j                  vrt        d| d      y# t        $ r*}t        d|        t        dt        |             d}~ww xY w) zValidate save data structurestate>   coinsr   points
automationselectedGameexchangeRateszMissing required fields: r7   Pointsr   z must be a numberr   zMissing game configuration for >   costiconnamesizer5   unlockedzGame z missing required fields: r8   z%Missing automation configuration for >   r<   levelr@   requiredCoinspointsPerSecondzAutomation config for z missing fields: r:   z(Missing exchange rate configuration for baseRatezExchange rate baseRate for r6   zCoins must be an integerr9    zSelected game 'z' not validTzValidation error: zSave data validation failed: N)getr   keysr&   r   
isinstanceintfloatr*   r   r   str)r   r2   r5   required_fieldsmissing_fieldsr7   game
points_keyr   game_configrequired_game_fieldsmissing_game_fieldsr8   auto_configrequired_auto_fieldsmissing_auto_fieldsexchange_ratesrate_configselected_gamer   s                       r   validate_save_dataz(GameSettingsValidator.validate_save_data.   s   <	GMM'2.E jO,s5::</@@N #<^<L!MNN YYx,F

 $vV_
!&**Z";c5\J$
|3D%EFF # IIgr*E

u$$'Ftf%MNN#Dk'\$&:SAQAQAS=T&T#&$uTF2LM`La%bcc # <4J

z)$'LTF%STT(.'h$&:SAQAQAS=T&T#&$'=dVCTUhTi%jkk # #YY;N

~-$'OPTv%VWW,T2!+//*a"@3,O$'B4&HY%Z[[ # eii3S9 !;<< "IInb9??AMdjj!@ ?=/!MNN 	G&qc*+<SVHEFF	Gs4   BI A)I ;A,I (A0I A:I 	J%JJN)
__name__
__module____qualname__r   r   r   rK   r   boolrY        r   r   r      s*    	6>GDcN >Gt >Gr_   r   c                      t               S )N)r   r^   r_   r   get_game_validatorra   n   s     ""r_   )osr$   jsontypingr   r   r   pathlibr   r   ra   r^   r_   r   <module>rf      s+    	 	  ! ! eG eGN#r_   