
    ah                     f    d Z ddlZddlmZ ddlmZmZ dedefdZd	ed
edefdZ	d Z
dedefdZy)a  
images_service.py

Purpose:
  Encapsulate image discovery and grouping logic. Responsible for scanning
  `static/User-photos/`, merging DB hints (file_paths), and grouping images for
  the gallery views.

Exports:
  - collect_user_images(user_id, db, static_path) -> list[dict]
  - latest_from_db_or_fs(cam_id, file_paths, static_path) -> (datetime|None, rel|None)
  - group_images_by_time(items) -> list[section]
    Ndatetime   )parse_ts_from_anybuild_media_urluser_idstatic_pathc           	      0   i }|j                  d| f      j                         }|D ch c]  }t        |d          }}|D ]  }|d   xs d}|j                  d      D 	cg c]#  }	|	j	                         s|	j	                         % c}	D ]  }
t        |
      }t        |      \  }}t        j                  j                  ||      }t        j                  j                  |      s\|xs2 t        j                  t        j                  j                  |            }|t        |      ||xs t        |d         d||<     t        j                  j                  |d      }t        j                  |      D ]  \  }}}|D ]  }|j!                         j#                  d      s#t        |      \  }}|s4||v s9t        j                  j                  ||      }t        j                  j%                  ||      j'                  d	d
      }||vs|xs2 t        j                  t        j                  j                  |            }|t        |      ||d||<     t)        |j+                               }|j-                  d d       |S c c}w c c}	w )Nz;SELECT camera_id, file_paths FROM cameras WHERE user_id = ?	camera_id
file_paths ,)relurltsr   User-photosz.jpgz.jpegz.pngz.gifz.webp\/c                 0    | d   xs t         j                  S Nr   )r   min)xs    MC:\Users\algun\Documents\ceba web\Ceba - Github\app_modules\images_service.py<lambda>z%collect_user_images.<locals>.<lambda>;   s    ag55    Tkeyreverse)executefetchallstrsplitstrip _normalize_to_static_user_photosr   ospathjoinexistsr   fromtimestampgetmtimer   walklowerendswithrelpathreplacelistvaluessort)r   dbr	   images_by_relcam_rowsruser_cam_idsrowr   prawr   r   camabs_pathrootdirpath_filesnameimagess                        r   collect_user_imagesrD      s:   MzzWZaYcdmmoH19:AC+'L:&,"
'1'7'7'<J'<!	AGGI'<JC237C',GBww||K5Hww~~h'M811"''2B2B82LM*3/!$!=C,<(=	&c" K  77<<]3DWWT]ED::<(()ST'-GBsl*77<<6ggooh<DDT3Om+Qx55bgg6F6Fx6PQB".s3 %(	*M#&  +  -&&()F
KK5tKDMI ; Ks   J!J7Jcam_idr   c                 
   d }d }|r|j                  d      D cg c]#  }|j                         s|j                         % c}D ]  }t        |      }t        |      \  }}	t        j
                  j                  ||      }
t        j
                  j                  |
      s\|xs2 t        j                  t        j
                  j                  |
            }|	| k(  s|s|||kD  s|}|} t        j
                  j                  |d      }t	        j                  |      D ]  \  }}}|D ]  }|j                         j                  d      s#t        |      \  }}	|	| k7  r7t        j
                  j                  ||      }
|xs2 t        j                  t        j
                  j                  |
            }|s|||kD  s|}t        j
                  j                  |
|      j                  dd      }|}  ||fS c c}w )Nr   r   r   r   r   )r#   r$   r%   r   r&   r'   r(   r)   r   r*   r+   r,   r-   r.   r/   r0   )rE   r   r	   	latest_dt
latest_relr:   r;   r   r   r<   r=   candidate_dtr>   r?   r@   rA   rB   s                    r   latest_from_db_or_fsrJ   ?   s   IJ'1'7'7'<J'<!	AGGI'<JC237C',GBww||K5H77>>(+S!7!78H8H8R!SLf}93DW`H`(	 
 K 77<<]3DWWT]ED::<(()ST'-GBf}ww||GT2HS!7!78H8H8R!SL!2lY6N(	ggooh<DDT3O 
  + j  3 Ks
   H H c                    ddl m   j                         }|j                         }|j                  d      }g g g g g d}| D ]  }|j	                  d      }t        |      s|d   j                  |       5|j                         }||z
  j                  }|dk(  r|d   j                  |       n|dk(  r|d	   j                  |       d|cxk  rd
k  rn n|d   j                  |       ||k\  r|d   j                  |       |d   j                  |        g }	dD ]8  }
||
   s	||
   j                  fdd       |	j                  |
||
   d       : |	S )Nr   r   r   )day)Danas   JučerZadnjih 7 danaOvaj mjesecStarije od mjesec danar   rQ   rM   rN      rO   rP   c                 B    | j                  d      xs j                  S r   )getr   )r   r   s    r   r   z&group_images_by_time.<locals>.<lambda>   s    QUU4[-HHLL-Hr   Tr   )titleitems)	r   nowdater0   rT   
isinstanceappenddaysr3   )rV   rW   todaystart_of_monthsectionsitr   d
delta_daysorderedr   r   s              @r   group_images_by_timerc   `   sj   !
(,,.CHHJE]]q])N"$H VVD\"h'-.55b9GGIai%%
?W$$R(1_X%%b) q %&--b1. ]#**2.-.55b9! " G]C=SM#HRVWNNS8C=AB ^ Nr   r:   returnc                     | j                  dd      j                  d      } | j                  d      r| t        d      d  } d| v r| | j	                  d      d  } | S d| vrd|  } | S )Nr   r   zstatic/zUser-photos/)r0   lstrip
startswithlenfind)r:   s    r   r%   r%      sy    			$##C(A||Ic)n aff^$&( H 
A1#Hr   )__doc__r&   r   helpersr   r   intr"   rD   rJ   rc   r%    r   r   <module>rn      s]    
  7( (s (V! !# !C !B"J  r   