o
    Gý¤h  ã                   @   sn   d Z ddlZddlmZ ddlmZmZ dedefdd	„Zd
ededefdd„Z	dd„ Z
dedefdd„ZdS )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                 C   sŠ  i }|  d| f¡ ¡ }dd„ |D ƒ}|D ]H}|d pd}dd„ | d¡D ƒD ]5}t|ƒ}	t|	ƒ\}
}tj ||	¡}tj |¡r[|
pIt	 
tj |¡¡}
|	t|	ƒ|
|pVt|d	 ƒd
œ||	< q&qtj |d¡}t |¡D ]J\}}}|D ]B}| ¡  d¡szqpt|ƒ\}
}|r²||v r²tj ||¡}tj ||¡ dd¡}	|	|vr²|
p¦t	 
tj |¡¡}
|	t|	ƒ|
|d
œ||	< qpqit| ¡ ƒ}|jdd„ dd |S )Nz;SELECT camera_id, file_paths FROM cameras WHERE user_id = ?c                 S   s   h | ]}t |d  ƒ’qS )Ú	camera_id)Ústr)Ú.0Úr© r   ú+/var/www/html/app_modules/images_service.pyÚ	<setcomp>   s    z&collect_user_images.<locals>.<setcomp>Ú
file_pathsÚ c                 S   ó   g | ]
}|  ¡ r|  ¡ ‘qS r   ©Ústrip©r   Úpr   r   r   Ú
<listcomp>   ó    z'collect_user_images.<locals>.<listcomp>ú,r	   )ÚrelÚurlÚtsr	   úUser-photos©z.jpgz.jpegz.pngz.gifz.webpú\ú/c                 S   s   | d pt jS ©Nr   )r   Úmin©Úxr   r   r   Ú<lambda>;   s    z%collect_user_images.<locals>.<lambda>T©ÚkeyÚreverse)ÚexecuteÚfetchallÚsplitÚ _normalize_to_static_user_photosr   ÚosÚpathÚjoinÚexistsr   ÚfromtimestampÚgetmtimer   r
   ÚwalkÚlowerÚendswithÚrelpathÚreplaceÚlistÚvaluesÚsort)r   Údbr   Úimages_by_relÚcam_rowsÚuser_cam_idsÚrowr   Úrawr   r   ÚcamÚabs_pathÚrootÚdirpathÚ_ÚfilesÚnameÚimagesr   r   r   Úcollect_user_images   sN   
ü€ú
ü€÷rI   Úcam_idr   c                 C   sB  d }d }|rHdd„ |  d¡D ƒD ]7}t|ƒ}t|ƒ\}}tj ||¡}	tj |	¡s*q|p4t tj 	|	¡¡}
|| krG|
rG|d u sC|
|krG|
}|}qtj |d¡}t 
|¡D ]H\}}}|D ]@}| ¡  d¡seq[t|ƒ\}}|| krpq[tj ||¡}	|pt tj 	|	¡¡}
|
r›|d u sŒ|
|kr›|
}tj |	|¡ dd¡}|}q[qT||fS )Nc                 S   r   r   r   r   r   r   r   r   D   r   z(latest_from_db_or_fs.<locals>.<listcomp>r   r   r   r   r    )r+   r,   r   r-   r.   r/   r0   r   r1   r2   r3   r4   r5   r6   r7   )rJ   r   r   Ú	latest_dtÚ
latest_relr@   r   r   rA   rB   Úcandidate_dtrC   rD   rE   rF   rG   r   r   r   Úlatest_from_db_or_fs?   s>   €€õrN   c                    s>  ddl m ‰  ˆ  ¡ }| ¡ }|jdd}g g g g g dœ}| D ]\}| d¡}t|ˆ ƒs2|d  |¡ q| ¡ }|| j}|dkrG|d  |¡ q|dkrS|d	  |¡ qd|  k r]d
krgn n|d  |¡ q||krs|d  |¡ q|d  |¡ qg }	dD ]}
||
 rœ||
 j‡ fdd„dd |	 |
||
 dœ¡ q|	S )Nr   r   r   )Úday)ÚDanasõ   JuÄerúZadnjih 7 danaúOvaj mjesecúStarije od mjesec danar   rT   rP   rQ   é   rR   rS   c                    s   |   d¡pˆ jS r!   )Úgetr"   r#   r   r   r   r%   €   s    z&group_images_by_time.<locals>.<lambda>Tr&   )ÚtitleÚitems)	r   ÚnowÚdater7   rV   Ú
isinstanceÚappendÚdaysr:   )rX   rY   ÚtodayÚstart_of_monthÚsectionsÚitr   ÚdÚ
delta_daysÚorderedr'   r   r   r   Úgroup_images_by_time`   sB   û


€re   r   Úreturnc                 C   s`   |   dd¡ d¡} |  d¡r| tdƒd … } d| v r%| |  d¡d … } | S d| vr.d| › } | S )Nr   r    zstatic/zUser-photos/)r7   ÚlstripÚ
startswithÚlenÚfind)r   r   r   r   r,   …   s   
þ
r,   )Ú__doc__r-   r   Úhelpersr   r   Úintr
   rI   rN   re   r,   r   r   r   r   Ú<module>   s    +!%