o
    g                     @   sZ   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
 G dd dZdS )    N)	DATABASES)configc                   @   sv   e Zd Zg dZedd Zedd Zedd Zdd	 Zeg fd
dZ	edddZ
edd Zedd ZdS )Zeus)gifjpgjpegpngmp4c                 C   sL   t |dkrdS | D ]\}}|du st|tr#| dkr#d  S qdS )uK  
        Valida un JSON asegurándose de que todos los campos tengan un valor.

        Parameters:
        - json_data: El JSON a validar.

        Raises:
        - ValueError: Si se encuentra algún campo sin valor.

        Returns:
        - Tuple: Una tupla que contiene el mensaje de error y un indicador de éxito.
        	   $   Error en los parámetros de entrada.TN NF)r   T)lenitems
isinstancestrstrip)self	json_datakeyvalue r   !/var/www/html/api-tag/lib/Zeus.pyvalidate_json_apitag   s   zZeus.validate_json_apitagc                 C   s   d}t t||S )Nz'^[\w\.-]+@[a-zA-Z\d\.-]+\.[a-zA-Z]{2,}$)boolrematch)r   emailemail_regexr   r   r   validate_email_format*   s   zZeus.validate_email_formatc                    sV   t jt j t j  d fddtdD }|| }t| 	 }| d| S )Nr   c                 3   s    | ]}t  V  qd S )N)secretschoice).0i
charactersr   r   	<genexpr>8   s    z%Zeus.make_password.<locals>.<genexpr>   $)
stringascii_lettersdigitspunctuationjoinrangehashlibsha256encode	hexdigest)r   passwordsaltpassword_with_salthashed_passwordr   r$   r   make_password3   s
   zZeus.make_passwordc                 C   s0   t j|  \}}dddddd}||dS )u  
        Obtiene el tipo de contenido (Content-Type) basado en la extensión del archivo.

        Parameters:
        - file_name: El nombre del archivo.

        Returns:
        - El tipo de contenido correspondiente a la extensión del archivo.
        z
image/jpegz	image/pngz	image/gifz	video/mp4)z.jpgz.jpegz.pngz.gifz.mp4zapplication/octet-stream)ospathsplitextlowerget)	file_name_file_extensioncontent_type_mappingr   r   r   get_content_typeD   s   zZeus.get_content_typec                 C   sP   |  D ]!\}}||vr%|du st|tr%| dkr%d| ddf  S qdS )u  
        Valida un JSON asegurándose de que todos los campos tengan un valor.

        Parameters:
        - json_data: El JSON a validar.
        - array_no_required: Arreglo de key que no son requeridos.

        Raises:
        - ValueError: Si se encuentra algún campo sin valor.

        Returns:
        - Tuple: Una tupla que contiene el mensaje de error y un indicador de éxito.
        Nr   z
El campo "u   " no tiene un valor válido.Tr   )r   r   r   r   )r   r   array_no_requiredr   r   r   r   r   validate_json_keysZ   s   zZeus.validate_json_keyses_CL.UTF-8c                 C   s    t t j| t j| dd}|S )aD  
        Format a number as Chilean peso.

        - es_CL.UTF-8'

        Args:
            number (float): The number to be formatted.
            set_locale (str, optional): The locale to be used for formatting. Defaults to 'es_CL.UTF-8'.

        Returns:
            str: The formatted number as Chilean peso.

        T)grouping)locale	setlocaleLC_ALLcurrency)number
set_localeformatted_numberr   r   r   format_to_set_locale_pesop   s   zZeus.format_to_set_locale_pesoc           	      C   s   | dd dd}td|sdS |dd }|d  }d}d	}t|D ]}|t|| 7 }|d
7 }|dkr:d}q&|d }d| }|dkrMd}||kS |dkrWd}||kS t|}||kS )u   
            Validates a Chilean RUT (Rol Único Tributario) number.

            Args:
                rut (str): The RUT number to be validated.

            Returns:
                bool: True if the RUT is valid, False otherwise.
            .r   -z^\d{1,8}[0-9K]$FN   r            0
   K)replacer   r   upperreversedintr   )	r   rut
rut_not_dvdv
multiplier_sumr_restdv_calculatedr   r   r   validate_rut   s.   zZeus.validate_rutc                 C   s    d}t |}||rdS dS )u4  
            Valida si una dirección de correo electrónico es válida.

            Args:
                correo (str): La dirección de correo electrónico a validar.

            Returns:
                bool: True si la dirección de correo electrónico es válida, False en caso contrario.
            z0^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$TF)r   compiler   )r   r   compiled_modelr   r   r   validate_mail   s
   

zZeus.validate_mailN)rD   )__name__
__module____qualname__MEDIA_TYPE_STATIC_FORMATclassmethodr   r   r7   rA   rC   rM   rd   rg   r   r   r   r   r      s"    



!r   )r/   rF   r8   r   r    r)   
app_configr   decoupler   config_environmentr   r   r   r   r   <module>   s    