o
    Vh                     @  s   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
 er0d dlmZ G d	d
 d
ZG dd de
ZdS )    )annotationsN)TYPE_CHECKING)Any)cast)CleoValueError)Question)IOc                   @  s    e Zd ZdddZdd
dZdS )SelectChoiceValidatorquestionChoiceQuestionreturnNonec                 C  s   || _ |j| _dS )z
        Constructor.
        N)	_questionchoices_values)selfr
    r   k/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/cleo/ui/choice_question.py__init__   s   zSelectChoiceValidator.__init__selectedr   str | list[str] | Nonec           
      C  sJ  t |tr	t|}|du rdS | j r/|dd}td|s)t| jj	
||d}n|g}g }|D ]`}g }t| jD ]\}}||krL|| q?t|dkrctddd	d
 |D  d|| jv rk|}	n&| rdt|  kr~t| jk rn n| jt| }	n	t| jj	
|||	 q6| j r|S td|d S )z$
        Validate a choice.
        N  z$^[a-zA-Z0-9_-]+(?:,[a-zA-Z0-9_-]+)*$,   z9The provided answer is ambiguous. Value should be one of z or c                 s  s    | ]}t |V  qd S N)str).0rr   r   r   	<genexpr>9   s    z1SelectChoiceValidator.validate.<locals>.<genexpr>.r   r   )
isinstanceintr   r   supports_multiple_choicesreplacerematchr   error_messageformatsplit	enumerater   appendlenjoinisdigitr   )
r   r   	_selectedselected_choicesmultiselect_choicesvalueresultskeychoiceresultr   r   r   validate   s@   



*
zSelectChoiceValidator.validateN)r
   r   r   r   )r   r   r   r   )__name__
__module____qualname__r   r7   r   r   r   r   r	      s    
r	   c                      sj   e Zd ZdZ	dd fddZed ddZed!ddZd"ddZd#ddZ	d$ddZ
d%ddZ  ZS )&r   z#
    Multiple choice question.
    Nr
   r   r   	list[str]default
Any | Noner   r   c                   s<   t  || d| _|| _t| j| _|| _d| _d| _	d S )NFz > zValue "{}" is invalid)
superr   _multi_select_choicesr	   r7   
_validator_autocomplete_values_prompt_error_message)r   r
   r   r<   	__class__r   r   r   P   s   
zChoiceQuestion.__init__c                 C     | j S r   rD   r   r   r   r   r'   \      zChoiceQuestion.error_messagec                 C  rG   r   )r@   rI   r   r   r   r   `   rJ   zChoiceQuestion.choicesboolc                 C  rG   r   r?   rI   r   r   r   r#   d   s   z(ChoiceQuestion.supports_multiple_choicesmulti_selectc                 C  
   || _ d S r   rL   )r   rM   r   r   r   set_multi_selectg      
zChoiceQuestion.set_multi_selectmessagec                 C  rN   r   rH   )r   rQ   r   r   r   set_error_messagej   rP   z ChoiceQuestion.set_error_messageior   c           
      C  s  | j }| j}|du rd| d}n;| jr<| j}|d}t|D ]\}}|t|  ||< q d| dd| d}n| j}d| d|t|  d}t	| jdkr^t	t
t	| jd nd}|g}t| jD ]\}	}|d	|	d
| d|  qh|d| | j}|| dS )z.
        Outputs the question prompt.
        Nz
<question>z</question>: r   z</question> [<comment>z, z</comment>]:r   z [<comment>r   z</>] 
)r   _defaultr?   r@   r)   r*   r"   stripr-   r,   r   r+   write_error_linerC   write_error)
r   rS   rQ   r<   r   ir2   widthmessagesr4   r   r   r   _write_promptm   s2   

( zChoiceQuestion._write_promptr   )r
   r   r   r;   r<   r=   r   r   )r   r   )r   r;   )r   rK   )rM   rK   r   r   )rQ   r   r   r   )rS   r   r   r   )r8   r9   r:   __doc__r   propertyr'   r   r#   rO   rR   r\   __classcell__r   r   rE   r   r   K   s    


r   )
__future__r   r%   typingr   r   r   cleo.exceptionsr   cleo.ui.questionr   
cleo.io.ior   r	   r   r   r   r   r   <module>   s    :