
    h1                        d Z ddlZddlmZmZmZmZmZ ddlm	Z	 ddl
mZ ddlmZ  ede      Zd	 Zej#                  d
      e	d               Zej#                  d      e	d               Zej#                  ddg      e	d               Zej#                  ddg      e	d               Zej#                  d      e	d               Zej#                  ddg      e	d               Zy)a  
map_routes.py

Purpose:
  Map and marker endpoints used by the Leaflet-based map UI. Provides logic for
  camera locations and generic fauna/structure markers. Performs schema
  migrations-on-boot for required columns/tables.

Routes:
  - GET /karta
  - GET /get_available_cameras
  - POST /add_camera_marker
  - POST /add_item_marker
  - GET /get_marker_locations
  - POST /delete_marker
    N)	Blueprintrender_templatejsonifyrequestsession   )login_required)get_db)validate_geographic_coordinates
map_routesc                 j   | j                  d      j                         D cg c]  }|d   	 }}d|vr	 | j                  d       d|vr	 | j                  d       | j                  d       | j	                          y c c}w # t        j                  $ r Y Rw xY w# t        j                  $ r Y Uw xY w)NzPRAGMA table_info(cameras)r   added_to_mapz=ALTER TABLE cameras ADD COLUMN added_to_map INTEGER DEFAULT 0locationz,ALTER TABLE cameras ADD COLUMN location TEXTzCREATE TABLE IF NOT EXISTS markers ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, type TEXT NOT NULL, latitude REAL NOT NULL, longitude REAL NOT NULL, name TEXT))executefetchallsqlite3Errorcommit)dbrowcolss      IC:\Users\algun\Documents\ceba web\Ceba - Github\app_modules\map_routes.py_ensure_map_schemar      s     jj)EFOOQRQsCFQDRT!	JJVW 	JJEF JJ	 IIK) S }} 		
 }} 		s(   A>B B BBB21B2z/kartac                      t        d      S )Nzmap.html)r        r   map_pager   4   s     :&&r   z/get_available_camerasc                      t               } t        |        | j                  dt        d   f      }|j	                         D cg c]  }|d   |d   |d   d }}t        |      S c c}w )NzSELECT camera_id, camera_name, IFNULL(added_to_map, 0) AS added_to_map FROM cameras WHERE user_id=? AND IFNULL(added_to_map, 0)=0 ORDER BY camera_name COLLATE NOCASEuser_id	camera_idcamera_namer   )r    namer   )r
   r   r   r   r   r   )r   curr   datas       r   get_available_camerasr%   :   s     
Br
**	/ 
		C y|  yE  yE  yG  H  yGqt#k*C4FX[\jXkl  yGD  H4= Hs   A%z/add_camera_markerPOST)methodsc                     t         j                  r@t         j                  j                  d      xs! t         j                  j                  d      nd } t         j                  r@t         j                  j                  d      xs! t         j                  j                  d      nd }t         j                  j                  d      xs1 t         j                  rt         j                  j                  d      ndj                         }| r|r|st        ddd      dfS t        | |      \  }}}|st        d|d      dfS |\  }}t               }t        |       |j                  d	t        d
   |f      j                         }	|	st        ddd      dfS | d| }
	 |j                  d|
t        d
   |f       |j                          t        d|	d   |d      S # t        j                  $ r t        ddd      dfcY S w xY w)Nlatlngr     FNedostaju podaci.successmessage  z?SELECT camera_name FROM cameras WHERE user_id=? AND camera_id=?r   u   Kamera nije pronađena.i  ,zMUPDATE cameras SET location=?, added_to_map=1 WHERE user_id=? AND camera_id=?Tr!   )r.   r!   r       Greška baze.  )r   is_jsonformgetjsonstripr   r   r
   r   r   r   fetchoner   r   r   )r)   r*   r    valid	error_msgcoordinateslat_flng_fr   r   r   s              r   add_camera_markerr?   I   s    AH',,

5
!
<W\\%5%5e%<UYC@G',,

5
!
<W\\%5%5e%<UYC!!+.lT[TcTc7<<3C3CK3PikssuIc55HIJCOO %DC$M!E9k5Y?@#EELE5	Br
**VY`ajYkmvXw
x  B  B  DC55NOPRUUU%!HL


bemov  xA  pB  DM  eN  	O
		4M8JYbcdd== L5_EFKKLs   =G #G>=G>z/add_item_markerc                  X   t         j                  r@t         j                  j                  d      xs! t         j                  j                  d      nd } t         j                  r@t         j                  j                  d      xs! t         j                  j                  d      nd }t         j                  j                  d      xs1 t         j                  rt         j                  j                  d      ndj                         }t         j                  j                  d      xs1 t         j                  rt         j                  j                  d      ndj                         }|s|}| r|r|st        ddd      d	fS t        | |      \  }}}|st        d|d      d	fS |\  }}t               }	t        |	       	 |	j                  d
t        d   ||||f      }
|	j                          t        d||
j                  d      S # t        j                  $ r t        ddd      dfcY S w xY w)Nr)   r*   	item_typer+   	item_nameFr,   r-   r0   zUINSERT INTO markers (user_id, type, latitude, longitude, name) VALUES (?, ?, ?, ?, ?)r   T)r.   rB   item_idr2   r3   )r   r4   r5   r6   r7   r8   r   r   r
   r   r   r   r   	lastrowidr   r   )r)   r*   rA   rB   r:   r;   r<   r=   r>   r   r#   s              r   add_item_markerrE   f   s    AH',,

5
!
<W\\%5%5e%<UYC@G',,

5
!
<W\\%5%5e%<UYC!!+.lT[TcTc7<<3C3CK3PikssuI!!+.lT[TcTc7<<3C3CK3PikssuI	c55HIJCOO %DC$M!E9k5Y?@#EELE5	BrLjjpsz  |E  tF  HQ  SX  Z_  aj  sk  l
		4iCMMZ[[== L5_EFKKLs   <AH #H)(H)z/get_marker_locationsc            	      "   t               } t        |        g }| j                  dt        d   f      j	                         D ]/  }|j                  |d   |d   |d   |d   |d   xs |d   d       1 | j                  d	t        d   f      j	                         D ]Z  }	 |d
   xs dj                  d      \  }}t        |      }t        |      }|j                  t        |d         d|||d   d       \ t        |      S # t        $ r Y sw xY w)NzGSELECT id, type, latitude, longitude, name FROM markers WHERE user_id=?r   idtypelatitude	longituder"   )rG   rH   rI   rJ   r"   z}SELECT camera_id, camera_name, location FROM cameras WHERE user_id=? AND IFNULL(added_to_map,0)=1 AND IFNULL(location,"")<>""r   r+   r1   r    camerar!   )r
   r   r   r   r   appendsplitfloat	Exceptionstrr   )r   resultmclat_slng_sr=   r>   s           r   get_marker_locationsrV      sV    
BrFZZadkludvcxy  C  C  ED'fI*;fI*6
 	 E ZZ  X  [b  cl  [m  Zo  p  y  y  {	jM/R66s;LE5%LE%,% 	an%m$
 	 { 6?  		s   1D	DDz/delete_markerc                     t         j                  j                  d      xs1 t         j                  rt         j                  j                  d      ndj                         } t         j                  j                  d      xs1 t         j                  rt         j                  j                  d      ndj                         }| st        ddd      dfS t               }t        |       	 |dk(  r8|j                  d	t        d
   | f       |j                          t        ddi      S |j                  d| t        d
   f       |j                          t        ddi      S # t        j                  $ r t        ddd      dfcY S w xY w)NrC   r+   rA   Fr,   r-   r0   rK   zPUPDATE cameras SET location=NULL, added_to_map=0 WHERE user_id=? AND camera_id=?r   r.   Tz,DELETE FROM markers WHERE id=? AND user_id=?r2   r3   )r   r5   r6   r4   r7   r8   r   r
   r   r   r   r   r   r   )rC   rA   r   s      r   delete_markerrX      sO    ||	*fgoow||/?/?	/JcemmoG!!+.lT[TcTc7<<3C3CK3PikssuI55HIJCOO	Br
L JJilst}l~  AH  lI  JIIKIt,--JJEQXYbQcGdeIIKIt,--== L5_EFKKLs   )<E &7E #FF)__doc__r   flaskr   r   r   r   r   securityr	   r   r
   security_enhancementsr   __name__bpr   router   r%   r?   rE   rV   rX   r   r   r   <module>r`      s,  "  G G $  B |X&0 ('  ' 
"#
  $
 
1L  2L6 
vh/L  0L2 
!"  #< 
VH-L  .Lr   