U
    2j/                     @  sj   d Z ddlmZ ddlZddlZdddddZddd	d
dZddddddZdddddddZdS )uB   Resolução de nome de impressora Windows (case-insensitive, UNC).    )annotationsNstr)valuereturnc                 C  s`   t | pd }|sdS td|}ddd |D }| }tdd|}tdd| S )N NFKDc                 s  s   | ]}t |s|V  qd S )N)unicodedata	combining).0ch r   =/var/www/html/LojaOnline/deploy/print_bridge/printer_match.py	<genexpr>   s     
 z)normalize_printer_name.<locals>.<genexpr>z
[^a-z0-9]+ z\s+)r   stripr   	normalizejoinlowerresub)r   sr   r   r   normalize_printer_name   s    r   z	list[str])desired_rawr   c                   s   t | pd }|sg S g  t ddd fdd}|| |dsT|dr|d	d
 td|D }|r||d  ntd|D ]}|r|| q S )Nr   r   None)vr   c                   sD   t | pd } | sd S |  }|kr,d S |  |  d S )Nr   )r   r   r   addappend)r   lkoutseenr   r   r      s    
z&_candidates_from_cadastro.<locals>.add\\//c                 S  s   g | ]}|r|qS r   r   )r
   pr   r   r   
<listcomp>&   s      z-_candidates_from_cadastro.<locals>.<listcomp>z[\\/]+)r   r   set
startswithr   split)r   rawr   partspartr   r   r   _candidates_from_cadastro   s    

r,   z
str | None)desired_nameavailable_namesr   c                   s0  t | pd }|r|sd S dd |D }|s2d S dd |D }t|D ]}|| }|rH|  S qHdd |D }dd |D }t|D ]4}t|  sq|D ]\}}	|	 kr|    S qqt|D ]`}t|  sqʇ fdd|D }
|
s fd	d|D }
|
r|
jd
d d |
d d   S qd S )Nr   c                 S  s,   g | ]$}t |pd  rt |p d  qS r   r   r   r
   nr   r   r   r$   5   s      z+find_best_printer_match.<locals>.<listcomp>c                 S  s   i | ]}|  |qS r   r   r1   r   r   r   
<dictcomp>9   s      z+find_best_printer_match.<locals>.<dictcomp>c                 S  s   g | ]}|t |fqS r   r   r1   r   r   r   r$   @   s     c                 S  s   g | ]\}}|r||fqS r   r   r
   r2   nnr   r   r   r$   A   s      c                   s    g | ]\}} |kr||fqS r   r   r6   cnr   r   r$   O   s      c                   s$   g | ]\}}|r| kr||fqS r   r   r6   r8   r   r   r$   Q   s       c                 S  s   t | d | d  fS N   r   lenr   xr   r   r   <lambda>S       z)find_best_printer_match.<locals>.<lambda>keyr   )r   r   r,   getr   r   sort)r-   r.   r   avail	lower_map	candidatehit
norm_pairsr2   r7   containsr   r8   r   find_best_printer_match0   s>    
rL   zlist[str] | Noneztuple[str | None, str])cadastro_namer.   r   c                   s  t | pd }|sdS dd |p$g D }|s2dS dd |D }t|}t|dkrx|d  |krx||d   d	fS t|D ]D\}}|| }|r|dkr|d
r|df  S |d	f  S qdd |D }	dd |	D }	|D ]8}t|  sq|	D ] \}
}| kr|
df    S qq|D ]l}t|  s:q$ fdd|	D }|sd fdd|	D }|r$|j	dd d |d d df  S q$dS )zXRetorna (nome_windows, motivo). motivo: exact | unc_tail | normalized | contains | none.r   )Nnonec                 S  s,   g | ]$}t |pd  rt |p d  qS r/   r0   r1   r   r   r   r$   a   s      z+resolve_windows_printer.<locals>.<listcomp>c                 S  s   i | ]}|  |qS r   r3   r1   r   r   r   r4   e   s      z+resolve_windows_printer.<locals>.<dictcomp>r;   r   exact)r!   r"   Zunc_tailc                 S  s   g | ]}|t |fqS r   r5   r1   r   r   r   r$   r   s     c                 S  s   g | ]\}}|r||fqS r   r   r6   r   r   r   r$   s   s      
normalizedc                   s    g | ]\}} |kr||fqS r   r   r6   r8   r   r   r$      s      c                   s$   g | ]\}}|r| kr||fqS r   r   r6   r8   r   r   r$      s       c                 S  s   t | d | d  fS r:   r<   r>   r   r   r   r@      rA   z)resolve_windows_printer.<locals>.<lambda>rB   rK   )
r   r   r,   r=   r   	enumeraterD   r'   r   rE   )rM   r.   r)   rF   rG   ZcandsirH   rI   rJ   r2   r7   rK   r   r8   r   resolve_windows_printerY   sH    rS   )N)	__doc__
__future__r   r   r   r   r,   rL   rS   r   r   r   r   <module>   s   * 