o
    /i=6                  .   @   sP  d dl Z d dlmZmZmZmZmZmZmZ d dl	m
Z
 d dlmZmZmZmZ d dlmZmZ 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mZmZmZm Z m!Z! d dl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* e Z+e+j,dedededededededededededededededededededededeej-eefde.dee. de.dee. dee. dee. dee. dee. dee/ dedee. dee dee. dee. dee. dee. d ee. d!e.d"ee. d#ee0 d$ej1d%e2f,d&d'Z3e+,d(d)eej-eefd*e.d+e.d$ej1d%e2fd,d-Z4e+,d.d)eej-eefd*e.d+e.d$ej1d%e2fd/d0Z5e+j6d1edd d2dddddd3eej-eef
d4e.d5e/d6e/d7ee. dee. d8ee. d9ee. d:ee. d;ee. d$ej1d%e2fd<d=Z7e+j6d>edeej-eefd*e.d$ej1d%e2fd?d@Z8e+j9d>edeej-eefd*e.dAe d$ej1d%e2fdBdCZ:e+j;d>edeej-eefd*e.d$ej1d%e2fdDdEZ<e+j,dFedeej-eefd*e.dGe!d$ej1d%e2fdHdIZ=e+j6dFeee.ef  deej-eefd*e.d$ej1d%e2fdJdKZ>e+j6dLee.ef deej-eefd*e.de.d$ej1d%e2fdMdNZ?e+j9dLedeej-eefd*e.de.dOee.ef d$ej1d%e2f
dPdQZ@e+j;dLedeej-eefd*e.de.d$ej1d%e2fdRdSZAe+j6dTeee.e.f  deej-eeed)dUdVed)dWdVfd$ej1d%e2d7e.dXe.fdYdZZBdS )[    N)	APIRouterDependsHTTPExceptionQueryFormFile
UploadFile)JSONResponse)OptionalListDictAny)datetimedate)ObjectId)Path)database)get_current_userdetails)Fleet	FleetBaseFleetCreateFleetResponseListFleetUpdateVehicleBase)create_fleet_serviceget_fleets_serviceread_fleet_serviceupdate_fleet_servicedelete_fleet_serviceget_fleet_vehicles_service$mark_fleet_under_maintenance_service unmark_fleet_maintenance_service/)response_model.F
fleet_namedescriptionstatus
vehicle_idregistration_number
vin_numbervehicle_model_idcoloryearvehicle_imageinsurance_numberinsurance_expiry	vendor_id	dealer_id	fuel_typevehicle_typecapacityvendor_nametag_namecan_flydbcurrent_userc              	      s  t d}|jddd d }|	rN|	jrNtt  }|	jdd }d| d| }|| }t|d}|	|	
 I d H  W d    n1 sIw   Y  |rUd| nd }i d	| d
|d|d|d|d|d|d|d|d|d|
d|r| nd d|d|d|d|d|||||dd|ddd}t||}|d drd|d d  |d d< td |d d!d"d#S )$Nzpublic/fleetsT)parentsexist_ok.zfleet-wbzpublic/fleets/r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   
account_id user_id)r5   r6   r7   r?   rA   
fleet_datazhttp://localhost:8000/zFleet created successfully)messagefleet   )contentstatus_code)r   mkdirfilenameintr   now	timestampsplitopenwriteread	isoformatgetr   r	   )r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   FLEET_IMG_PATHimage_filenamerL   extfilepathfvehicle_image_pathrB   result rZ   :/var/www/html/moveengine/app/v1/routers/platform/fleets.pycreate_fleet_endpoint1   sz   
	



r\   z/mark/{fleet_id}r@   fleet_idreasonc                       t | |||dS N)r]   r^   r9   r8   )r    r]   r^   r8   r9   rZ   rZ   r[   mark_fleet_under_maintenance}      rb   z/unmark/{fleet_id}c                    r_   r`   )r!   ra   rZ   rZ   r[   unmark_fleet_maintenance   rc   rd   z/list/{account_id}/
   ascr?   skiplimitqcreated_date_fromcreated_date_tosort_by
sort_orderc                    s@   | dkr| |
 ddkrtdddt| |||||||||	
S )Nallr?   r@     Not authorizedrG   detail)rR   r   r   )r?   rg   rh   ri   r&   rj   rk   rl   rm   r8   r9   rZ   rZ   r[   
get_fleets   s   rs   z/{fleet_id}c                    sB   t d t| |}|dr|d |ddkrtddd|S )N146146146146146146146r?   r@   ro   rp   rq   )printr   rR   r   r]   r8   r9   rD   rZ   rZ   r[   
read_fleet   s   
rw   rB   c                    sJ   t | |}|dr|d |ddkrtdddt| |jdd|S )Nr?   r@   ro   rp   rq   T)exclude_unset)r   rR   r   r   
model_dump)r]   rB   r8   r9   existing_fleetrZ   rZ   r[   update_fleet   s
   
r{   c                    s@   t | |}|dr|d |ddkrtdddt| |S Nr?   r@   ro   rp   rq   )r   rR   r   r   )r]   r8   r9   rz   rZ   rZ   r[   delete_fleet   s
   

r}   z/{fleet_id}/vehiclesvehiclec                    s   t | |}|d|ddkrtddd|jdt jis(tdddt fd	d
|dg D r=tddd  }|j	
dt| id|idt id}|jdkr`tddd|j
dt jidd| ii t | |S )Nr?   r@   ro   rp   rq   _id  zVehicle model not foundc                 3   s    | ]
}|d   j kV  qdS r'   Nr'   .0vr~   rZ   r[   	<genexpr>   s    z'add_vehicle_to_fleet.<locals>.<genexpr>vehicles  z'Vehicle ID already exists in this fleetupdated_date)z$push$setr   zFailed to add vehiclez	$addToSet	fleet_ids)r   rR   r   r   find_oner   r*   anyry   fleets
update_oner   utcnowmodified_count)r]   r~   r8   r9   rD   vehicle_datarY   rZ   r   r[   add_vehicle_to_fleet   s,   





r   c                    s8   t | |}|d|ddkrtdddt| |S r|   )r   rR   r   r   rv   rZ   rZ   r[   get_fleet_vehicles   s
   

r   z!/{fleet_id}/vehicles/{vehicle_id}c                    s   t | |}|d|ddkrtdddt fdd|dg D d }|s/td	d
d|jdt|d i}|r[|dd|dd|dd|dd|ddd|d< |S )Nr?   r@   ro   rp   rq   c                 3        | ]}|d   kr|V  qdS r   rZ   r   r   rZ   r[   r         z$get_fleet_vehicle.<locals>.<genexpr>r   r   Vehicle not found in fleetr   r*   manufacturer_namer3   r2   is_autonomousFr7   )r   r3   r2   r   r7   model_details)r   rR   r   nextr   r   r   )r]   r'   r8   r9   rD   r~   modelrZ   r   r[   get_fleet_vehicle  s    
 





r   r   c           	         s   t | |}|d|ddkrtdddt fddt|d D d }|d u r1td	d
d|d }i || |d i||< |jdt| id|t	 di}|j
dkr`tdddt | |S )Nr?   r@   ro   rp   rq   c                 3   s$    | ]\}}|d   kr|V  qdS r   rZ   )r   ir   r   rZ   r[   r   /  s   " z'update_fleet_vehicle.<locals>.<genexpr>r   r   r   r'   r   r   )r   r   r   r   zFailed to update vehicle)r   rR   r   r   	enumerater   r   r   r   r   r   )	r]   r'   r   r8   r9   rD   vehicle_indexupdated_vehiclesrY   rZ   r   r[   update_fleet_vehicle#  s4   
 




r   c                    s   t | |}|d|ddkrtdddt fdd|dg D d }|s/td	d
d|jdt| idd iidt id}|j	dkrPtddd|j
dt|d idd| ii t | |S )Nr?   r@   ro   rp   rq   c                 3   r   r   rZ   r   r   rZ   r[   r   T  r   z,remove_vehicle_from_fleet.<locals>.<genexpr>r   r   r   r   r'   r   )$pullr   r   r   zFailed to remove vehicler*   r   r   )r   rR   r   r   r   r   r   r   r   r   r   )r]   r'   r8   r9   rD   r~   rY   rZ   r   r[   remove_vehicle_from_fleetI  s(   
 





r   z/dropdown/vehicleszSearch query for fleet name)defaultr%   z
Search allrn   c                    s   |d }t | |||S )Nr?   )get_fleet_dropdown_list)r8   r9   ri   rn   r?   rZ   rZ   r[   get_vehicle_dropdown_listj  s   r   )Cosfastapir   r   r   r   r   r   r   fastapi.responsesr	   typingr
   r   r   r   r   r   bsonr   repathlibr   app.dbr   app.v1.dependencies.authr   app.v1.models.platform.fleetsr   r   r   r   r   r   app.v1.services.platform.fleetsr   r   r   r   r   r   r    r!   routerpostget_mongo_dbstrrJ   boolMongoDBdictr\   rb   rd   rR   rs   rw   putr{   deleter}   r   r   r   r   r   r   rZ   rZ   rZ   r[   <module>   s   $ (	
K	
#
% 

