
    ˿i                     T    d dl mZ d dlmZ d dlmZmZmZmZm	Z	 d dl
Z
 G d d      Zy)    )List)HTTPException)CompanyRoleSeafarerVesselVesselTypesResponseNc                   v    e Zd Zd Zdee   fdZdedee   fdZ	dedee
   fdZdedee   fdZdedefd	Zy
)CompanyServicec                 x    d| _         ddi| _        d| _        d| _        d| _        d| _        d| _        d| _        y )Nz6https://cms.marinerskills.com/api/get-all-company-listSecurityKeyFslKvipEQ3hT2PfdZla00hpz=https://cms.marinerskills.com/api/get-vessel-based-on-companyz>https://cms.marinerskills.com/api/get-seafarer-based-on-vesselz<https://cms.marinerskills.com/api/get-roles-based-on-company)api_urlsecurity_keyvessels_api_urlvessels_security_keyseafarer_api_urlseafarer_security_keyrole_api_urlrole_security_key)selfs    5/var/www/html/beaconod-api/app/api/company/service.py__init__zCompanyService.__init__   sG    O*,EF^$=! `%>"Z!:    returnc                    	 t        j                  | j                  | j                  d      }|j	                          |j                         }t        |t              st        d      |D cg c]  }t        di | c}S c c}w # t         j                  $ r}t        dd|       d }~wt        $ r}t        dt        |            d }~ww xY w)	N
   jsontimeoutUnexpected API response format  External API error: status_codedetail   )requestspostr   r   raise_for_statusr   
isinstancelist
ValueErrorr   RequestExceptionr   	Exceptionstr)r   responsedataces        r   get_all_companiesz CompanyService.get_all_companies   s    	@}}T\\8I8ISUVH%%'==?D dD) !ABB*./$QGLaL$///(( 	TC:Nqc8RSS 	@CA??	@s6   A+B -B?B B CB**C6CC
company_idc           
         	 t        |      | j                  d}t        j                  | j                  |d      }|j                          |j                         }t        |t              r|}nCt        |t              r%t        |j                  d      t              r|d   }nt        d|       g }|D ]  }|j                  |j                  d      xs |j                  d      |j                  d      xs |j                  d	      |j                  d
      xs |j                  d      |j                  d      xs |j                  d      |j                  d      xs |j                  d      d        |D cg c]  }t        di | c}S c c}w # t        j                  $ r}	t        dd|	       d }	~	wt         $ r}	t        dt        |	            d }	~	ww xY w)N	CompanyIDr   r   r   r3   zUnexpected API response: vesselidVesselID
vesselname
VesselName
vesseltype
VesselType
vesselstds
VesselStds	companyidr:   )r<   r>   r@   rB   r:   r"   r#   r$   r'   r(   )r1   r   r)   r*   r   r+   r   r,   r-   dictgetr.   appendr   r/   r   r0   )
r   r7   payloadr2   r3   vesselsfixedvfr5   s
             r   get_vessels_by_companyz%CompanyService.get_vessels_by_company<   s   	@$'
ODD]D]^G}}T%9%9QSTH%%'==?D$%D$'Jtxx7G,Nv, #<TF!CDDE !j 1 FQUU:5F"#%%"5"L|9L"#%%"5"L|9L"#%%"5"L|9L!"{!3!Iquu[7I   *//AFKQK///(( 	TC:Nqc8RSS 	@CA??	@s6   E>F  FF F G$-F==G$	GG$	vessel_idc                 ^   	 t        |      | j                  d}t        j                  | j                  |d      }|j                          |j                         }t        |t              r|}nFt        |t              r+d|v rt        |d   t              r|d   }nt        d|       t        d      |st        dd	      |D cg c]  }t        di | c}S c c}w # t        j                  $ r}t        d
d| 	      d }~wt        $ r}t        dt        |      	      d }~ww xY w)N)r<   r   r   r   r3    Unexpected API response format: z"Invalid response from external API  z$No seafarers found for this vesselIdr$   r"   r#   r'   r(   )r1   r   r)   r*   r   r+   r   r,   r-   rD   r.   r   r   r/   r0   )r   rM   rG   r2   r3   	seafarerssr5   s           r   get_seafarers_by_vesselz&CompanyService.get_seafarers_by_vessel\   s   	@#&y>$B\B\]G}}T%:%:RTUH%%'==?D $% 	D$'T>jft&D $VI$'Gv%NOO !EFF#<bcc ,559aHMqM9555(( 	TC:Nqc8RSS 	@CA??	@s6   CC" CC" C" "D,5DD,D''D,c                    || j                   d}	 t        j                  | j                  |d      }|j	                          |j                         }t        |t              st        d      |D cg c]  }t        d	i | c}S c c}w # t        j                  $ r}t        dd|       d }~wt        $ r}t        dt        |            d }~ww xY w)
Nr9      r   r!   r"   r#   r$   r'   r(   )r   r)   r*   r   r+   r   r,   r-   r.   r   r/   r   r0   r1   )r   r7   rG   r2   r3   itemr5   s          r   	get_roleszCompanyService.get_roles{   s    #11

	@}}T%6%6WbQH%%'==?DdD) !ABB-12TTDL4LT222(( 	TC:Nqc8RSS 	@CA??	@s6   A!B 2BB B CB//C;CCc                    	 t        |      | j                  d}t        j                  | j                  |d      }|j                          |j                         }t        |t              r|}n(t        |t              r
d|v r|d   }nt        d|       |D cg c]  }t        di | }}t        |D ch c]B  }|j                  r4|j                  j                         r|j                  j                         D c}      }|st        dd      t        |	      S c c}w c c}w # t        j                   $ r}	t        d
d|	       d }	~	wt"        $ r}	t        dt        |	            d }	~	ww xY w)Nr9   r   r   r3   rO   rP   z(No vessel types found for this companyIdr$   )vessel_typesr"   r#   r'   r(   )r1   r   r)   r*   r   r+   r   r,   r-   rD   r.   r   r@   stripr   r	   r/   r0   )
r   r7   rG   r2   r3   rH   rJ   vessel_modelsrY   r5   s
             r   get_vessel_typeszCompanyService.get_vessel_types   sh   #	@$'
ODD]D]^G}}T%9%9QSTH%%'==?D $%D$'FdNv, #CD6!JKK 3::'QV[a['M:  &!&A<<ALL$6$6$8 ""$&! L  # #E 
 'LAA ;! (( 	TC:Nqc8RSS 	@CA??	@sC   BD+ D!-D+ 8AD&?!D+ !
D+ +E5>EE5E00E5N)__name__
__module____qualname__r   r   r   r6   intr   rL   r   rS   r1   r   rW   r	   r\   r(   r   r   r   r      s    ;@4= @T@ @f @@@ @h @>@C @DJ @*$@3 $@3F $@r   r   )typingr   fastapir   app.api.company.schemasr   r   r   r   r	   r)   r   r(   r   r   <module>rd      s"     ! X X n@ n@r   