
    soj8                         d dl Z d dlZd dlmZ d dlZd dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ  G d	 d
e          Zej        e	j        ej        e	j        iZ G d d          ZdS )    N)StrEnum)	AssetPath)WikiException)GameDifficulty)	Character)Terminology)get_list_from_jsonc                   "    e Zd ZdZdZdefdZdS )SupabaseTableName	characterterminologyreturnc                     t           |          S )N)TABLE_TO_LOCAL_ASSET_PATHselfs    #/app/src/model/wiki/SupabaseRest.pyget_asset_pathz SupabaseTableName.get_asset_path   s    (..    N)__name__
__module____qualname__	CHARACTERTERMINOLOGYr   r    r   r   r   r      s9        IK/	 / / / / / /r   r   c                       e Zd Zd Zdedee         fdZede	de
fd            Ze	 	 	 	 	 	 dd
ededededededefd            ZdS )SupabaseRestc                     t           j                                        | _        t           j                                        | _        dS )z'
        Creates a wiki object
        N)EnvSUPABASE_REST_URLgetrest_urlSUPABASE_API_KEYapi_keyr   s    r   __init__zSupabaseRest.__init__   s4     -1133+//11r   tabler   c                 b   | j         r| j        s!t          |                                          S | j          | }t	          j        || j        dd          }|j        dk    r9t          j        d| d           t          |                                          S |	                                S )z
        Make a request to the Supabase REST API
        :param table: The table of the resource
        :return: The response
        zapplication/json)apikeyzContent-Type)urlheaders   zError making request to z, using local resource)
r"   r$   r	   r   requestsr!   status_codeloggingerrorjson)r   r&   	full_pathresponses       r   make_get_requestzSupabaseRest.make_get_request&   s     } 	>DL 	>%e&:&:&<&<===}-e--	<dlL^#_#_
 
 

 3&&MVYVVVWWW%e&:&:&<&<=== }}r   
difficultyc                 Z   t                                          t          j                  }t	          |          dk    rt          d          t          j        |           | t          di |d         S |D ]!}|d         | j	        k    rt          di |c S "t          d|  d          )z|
        Get a random character
        :param difficulty: The difficulty level
        :return: A random character
        r   zNo characters foundNr4   z$No characters found with difficulty z	 or lowerr   )
r   r3   r   r   lenr   randomshuffler   value)r4   r2   chars      r   get_random_characterz!SupabaseRest.get_random_character?   s      ,~~>>?P?Z[[x==A 5666x   ++x{+++ 	) 	)DL!Z%555 ((4((((( 6 X:XXXYYYr   NFTmax_lenonly_lettersconsider_len_without_spaceallow_spacesmin_unique_charactersmax_unique_charactersc                    t                                          t          j                  }t	          j        |           |D ]!}| Vt          |d                   | k    r=|r:t          t          |d                                       dd                    | k    s[|ret          |d                   	                                s>|r;t          |d                                       dd          	                                s|'t          t          |d                             |k     r|(t          t          |d                             |k    rt          di |c S t          d          )a~  
        Get a random terminology
        :param max_len: The maximum length of the terminology
        :param only_letters: Whether the terminology should only contain letters
        :param consider_len_without_space: Whether the length of the terminology should be
        considered without spaces
        :param allow_spaces: Whether the terminology can contain spaces if only_letters is True
        :param min_unique_characters: The minimum amount of unique characters in the terminology
        :param max_unique_characters: The maximum amount of unique characters in the terminology
        :return: A random terminology
        Nname  zNo terminologies foundr   )r   r3   r   r   r7   r8   r6   strreplaceisalphasetr   r   )r<   r=   r>   r?   r@   rA   r2   terms           r   get_random_terminologyz#SupabaseRest.get_random_terminologyX   st   ,  ,~~>>?P?\]]x    	' 	'D"s4<'8'87'B'B.CV--55c2>>??7JJ CV$5$5$=$=$?$? $ T&\):):)B)B3)K)K)S)S)U)U  &1DL))**-BBB &1DL))**-BBB&&&&&&&4555r   )NFFTNN)r   r   r   r%   r   listdictr3   staticmethodr   r   r;   intboolr   rK   r   r   r   r   r      s        2 2 2&7 DJ    2 Z ZI Z Z Z \Z0 "+0!%)%)26 262626 %)26 	26
  #26  #26 
26 26 26 \26 26 26r   r   )r.   r7   enumr   r,   resources.EnvironmentEnvironmentr   src.model.enums.AssetPathr   src.model.error.CustomExceptionr   src.model.game.GameDifficultyr   src.model.wiki.Characterr   src.model.wiki.Terminologyr   src.utils.file_utilsr	   r   r   
CHARACTERSr   TERMINOLOGIESr   r   r   r   r   <module>r\      s6            # # # # # # / / / / / / 9 9 9 9 9 9 8 8 8 8 8 8 . . . . . . 2 2 2 2 2 2 3 3 3 3 3 3/ / / / / / / / !5!9#: m6 m6 m6 m6 m6 m6 m6 m6 m6 m6r   