o
    *g|H                     @   sr  d Z ddlZddlZddlZddlmZmZ ddlmZm	Z	m
Z
mZ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 ddlmZ dd	lmZ dd
lmZmZmZ ddlm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z& ddl'm(Z( ddl'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1 e2 Z3de4fddZ5eddgdddiig dZ6e	de	de	de	de	de	de	de	de	de	de	de	dfde4de4de7e4 dB d e4dB d!e4dB d"e4dB d#e4dB d$e7e4 dB d%e7e4 dB d&e8dB d'e4dB d(e4dB fd)d*Z9ee8e
e9f Z:e6;d+d,efd-d.Z<e6;d/e
e5fd(e4d0efd1d2Z=e6;d3e
e5fd(e4d0efd4d5Z>e6;d6e
e5fd(e4d0efd7d8Z?e6;d9e
e5fd(e4d0efd:d;Z@e6;d<e
e5fd(e4d0efd=d>ZAe6;d?e	d@dAdBdCe
e5fd(e4dDe7e8 d0efdEdFZBe6;dGe	dfdHe:de4fdIdJZCe6;dKe
e5fd(e4dLeDdMeDd0efdNdOZEe6FdPe6FdPdQe4fdRdSZGe6FdTdUefdVdWZHe6;dXed@e	d@e	d@fdYee d(e4de4fdZd[ZIe6Fd\edfd(e4de4fd]d^ZJe6Fd\edfd(e4de4fd_d^ZJe6Fd`edfdUed(e4de4fdadbZKe6Ldcd(e4dde4fdedfZMdS )gzPresentation router    N)	AnnotatedList)		APIRouterBodyDependsFileHTTPExceptionQueryRequest
UploadFilestatus)FileResponse)error_wrappers)Team)CompanyProfileSlide)CompanyProfilePPT)ProjectSectionSlide)PPTStructure)TeamService)UserService)ClientConfig)doc_uploader_call)DocUploaderV2)DynamoDB)S3BucketStorageget_default_bucket_name)
parsed_urlteam_idc              
   C   s   z't | }|stdddidtd|d }|du r%tdddid|W S  ty? } ztd	| W Y d}~dS d}~ww )
zGet the team data  messageTeam not foundstatus_codedetaildefaultclient_configNzTeam client config not foundzError in get_team_config_data)r   get_team_by_idr   r   init_default_with_custom_values	Exceptionprint)r   teamdefault_confige r/   4/var/www/html/XCapMarket/controllers/presentation.pyget_team_config_data.   s    
r1   z/presentationpresentationr    descriptionz	Not found)prefixtags	responsesdependenciescompany_urlcompany_nameteam_membersindustrysectorpublic_status
pitch_typetargetspublic_compsproject_detailsnotes
project_idc                    s&   t || |||||||||	|
d}|S )z)Create a project class for the project_id)rC   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   )r   )r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   projectr/   r/   r0   create_project_classI   s    rE   z/generate_ppt/company_profile/companyc                 C   s   t | jj}| jdu st| jdkrdg| _t|dd}| jD ]}|| q|jjdur2|d d|jj	 d }|j
| t||d	d
 dS )z!Get recommendations for a companyNr   private_company_profileT)r8   new_deckstock_chart_outputzppt_templates/finalized/%s.pptx_company_profile/filename)r   r8   urlslide_to_createlenr   create_slidescompany_infostock_tickerr9   prssaver   split)rF   r8   pptgslideppt_file_pathr/   r/   r0   generate_company_profile_pptn   s    

r[   z/get_structurer,   c              
      s   | st dddidS ztj| d}t|d |js(t||d}|  |jW S |W S  tyM } zt	j
dd	d
 t ddt|idW  Y d}~S d}~ww )zGet the structure of the PPT.  r!   Project id is not providedr#   rC   r,   rD   clientzError in get_structureTexc_infoN)r   r   check_project_in_dbr+   sectionsr   get_structurerD   r*   
XCM_loggererrorstrrC   r,   rD   ppt_structurer.   r/   r/   r0   re      s$   
 re   z/process_filesc              
      s\   zt | |d ddiW S  ty- } zt| tddt|idW  Y d}~S d}~ww )zUpload files to the project.)rC   r`   r!   zFiles uploaded successfully.r\   r#   N)r   r*   rf   rg   r   rh   )rC   r,   r.   r/   r/   r0   process_files   s   

 rk   z!/get_structure/flesh_out_sectionsc              
      s   zPt j| d}d}|js!t||d}|  |  | }d}t|jd dddg fv rK|du r8t||d}| I dH  |  |j	
 d W S |
 d W S  tyr } zt| td	d
t|idW  Y d}~S d}~ww )z%Create the slides from the structure.r^   Fr_   Tr   slidesNrd   r\   r!   r#   )r   rc   rd   r   re   add_or_update_project_in_db_update_projectgetattrflesh_out_sectionsrD   dictr*   rf   rg   r   rh   )rC   r,   rD   created_ppt_structurerj   r.   r/   r/   r0   rp      s,   
 rp   z$/get_structure/research_presentationc              
   C   s   zAt j| d}t||d}|jjs%|  |  t j| d}t||d}t|jjd dddu r9|  |  |	  ddiW S  t
yb } zt| tddt|id	W  Y d}~S d}~ww )
z&Conduct research for the presentation.r^   r_   r   rl   Nr!   z Research conducted successfully.r\   r#   )r   rc   r   rD   rd   re   rm   ro   rp   research_presentationr*   rf   rg   r   rh   ri   r/   r/   r0   rs      s$   

 rs   z/get_structure/create_pptc                 C   s>   t j| d}t||d}| }|  t||dd dS )z"Create the PPT from the structure.r^   r_   rK   rL   rM   )r   rc   r   
create_PPTrm   r   rW   )rC   r,   rD   rj   deck_locationr/   r/   r0   
create_ppt   s
   rv   z/update_sections.zSections to updateT)r3   embedrd   c              
      s
  z]t j| d}t||d}g }|D ]!}| }|dg pg }dd |D |d< |tdi | q||I dH }	dd |	D }
t }|	d}|j
|d	| id
d|
idd d|	dW S  ty } ztdt|  tddt|idW  Y d}~S d}~ww )z3Update or add new sections to the project structurer^   r_   rl   c                 S   s   g | ]	}t d i |qS )r/   )r   ).0rY   r/   r/   r0   
<listcomp>   s    z#update_sections.<locals>.<listcomp>Nc                 S   s    g | ]}t |jd d dqS )T)exclude_noneby_alias)r   	parse_objrq   )rx   sectionr/   r/   r0   ry      s    project_structurerC   zSET sections = :sectionsz	:sectionsALL_NEW)tablekeyupdate_expressionexpression_valuesreturn_valueszSections updated successfully)r!   rd   zError updating sections: r\   r!   r#   r/   )r   rc   r   copygetappendr   flesh_out_new_sectionr   	get_tableupdate_itemr*   rf   rg   rh   r   )rC   rd   r,   rD   rj   sectionsLLMr}   section_copyslides_dataupdated_sectionsdb_sectionsdynamodbr   r.   r/   r/   r0   update_sections   s>   
	 r   z/projectrD   c           	   
      s   zO|st tjddt }||}|st tjddt| jj| _|| _	t
 }g }| jrG| jD ]}||}|rA|| j q1|| q1|   | |dW S  tjyr } zt| t ddt|idW  Y d}~S d}~ww )zCreate a projectzteam_id is requiredr#   r"   )rD   users_added_errorsr\   r!   N)r   r   HTTP_400_BAD_REQUESTr   r(   HTTP_404_NOT_FOUNDr   r8   rO   r`   r   r:   get_user_by_idadd_projectrC   r   update_project_in_dbr   ValidationErrorrf   rg   rh   )	rD   r   team_serviceexisting_teamuser_serviceuser_addition_erroruser_iduserr.   r/   r/   r0   create_project  s:   



 r   z3/get_structure/research_presentation/research_slidesection_numberslide_numberc                    sd   | st dddidS |st dddidS |st dddidS ddlm} || |||}d	|jiS )
zResearch the slide.r\   r!   r]   r#   zSection number is not providedzSlide number is not providedr   )research_slidetask_id)r   tasks.presentation_tasksr   delayid)rC   r   r   r,   celery_research_slider   r/   r/   r0   r   =  s$   
r   z/slide/researchresearch_idc                    s(   t  }|||j| }|ddS )z,Check the status of the research slide task.research )r   get_itemr   slides_research_tabler   )r   dbresearch_itemr/   r/   r0   research_slide_status[  s   r   z/projects/userrequestc              
      s  zo| j jsttjddt }|| j jj}|j}|s g W S t	 }dd |D }d}g }t
dt||D ].}||||  }	|jj|jjd|	iid}
d	|
v rd|jj|
d	 v rd||
d	 |jj  q6|jd
d dd |W S  ty } zttjdt| dd}~ww )zGet user projectszUser  not foundr#   c                 S   s   g | ]}d |iqS r^   r/   )rx   pidr/   r/   r0   ry   x  s    z%get_user_projects.<locals>.<listcomp>d   r   Keys)RequestItems	Responsesc                 S   s   t j | d S )Nmodified_date)datetimefromisoformat)xr/   r/   r0   <lambda>  s    z#get_user_projects.<locals>.<lambda>T)r   reversezFailed to get user projects: N)statecurrent_userr   r   HTTP_401_UNAUTHORIZEDr   r   emailprojectsr   rangerQ   r   batch_get_itemnameextendsortr*   HTTP_500_INTERNAL_SERVER_ERRORrh   )r   r   r   project_idsr   keys
chunk_sizer   ichunkresponser.   r/   r/   r0   get_user_projectse  sF   r   z/upload_provided_filesfilesc              
      s   z^| st tjddt }||}|st tjddtj|d}|s+t tjddzt||| d}|	| I dH  d|
 d	W W S  ty_ } zt| t d
dt|id|d}~ww  tyz } zt| t d
dt|idd}~ww )z%Upload provided files to the project.zNo files provided for uploadr#   r"   r^   Project not found)rD   r,   r   NzFiles uploaded successfully)r!   resultsr\   r!   )r   r   r   r   r(   r   r   rc   r   store_on_s3get_uploaded_filesr*   rf   rg   rh   )r   rC   r   r   r,   rD   uploadedFilesr.   r/   r/   r0   upload_provided_files  sD   



r   z$/project/{project_id}/uploaded_filesc                       t t d}|| |S zGet the files in a projectbucket_namer   r   get_files_in_folderrC   r   
s3_storager/   r/   r0   get_project_files     r   c                    r   r   r   r   r/   r/   r0   r     r   z/project/{project_id}c              
      s   zP|st tjddidtj|d}|s"t tjdd| did|j|kr0t tjddid| jj	j
}|jp9g }||vrGt tjddidtj|jd	d
dW S  t y_ } z|d}~w ty~ } ztjdt|d	d t tjddid|d}~ww )zGet a specific project by IDr!   zProject ID is requiredr#   r^   zProject with ID z
 not foundz0You don't have permission to access this projectz$You are not a member of this projectT)rz   )r   dataNzError retrieving project: %sra   z.Internal server error while retrieving project)r   r   r   r   rc   r   r`   HTTP_403_FORBIDDENr   r   r   r:   HTTP_200_OKrq   r*   rf   rg   rh   r   )r   rC   r   rD   current_user_emailr:   her.   r/   r/   r0   get_project  sR   



r   z!/project/{project_id}/delete_file	file_pathc              
      s   z+| rt j| d}|sttjddt d|  dt }tt d}|	| ddiW S  t
yG } zt| tddt|idd	}~ww )
z Delete the file from the projectr^   r   r#   rK   r   r!   zFile deleted successfullyr\   N)r   rc   r   r   r   r   	file_namer   r   delete_file_from_s3r*   rf   rg   rh   )rC   r   rD   r   r.   r/   r/   r0   delete_file  s"   


r   )N__doc__r   osloggingtypingr   r   fastapir   r   r   r   r   r	   r
   r   r   fastapi.responsesr   pydanticr   models.teamr   ,services.ppt_generator.company_profile_slider   7services.ppt_generator.data_classes.company_profile_pptr   +services.ppt_generator.data_classes.projectr   r   r    services.ppt_generator.structurer   services.team_servicesr   services.user_servicer   utils.client_checkr   !utils.document_loader.DocUploaderr   #utils.document_loader.DocUploaderV2r   utils.dynamo_dbr   utils.s3_storager   r   utils.url_parserr   	getLoggerrf   rh   r1   r2   listrq   rE   ProjectDependencypostr[   re   rk   rp   rs   rv   r   r   intr   r   r   r   r   r   r   deleter   r/   r/   r/   r0   <module>   s   ,
	


	

"
-#.- 0