
    KVh!                        d dl mZmZmZmZ d dlmZ d dlmZm	Z	 d dl
mZmZmZ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 d dlmZ d d	lmZ d d
l m!Z!  eddg          Z"e"#                    dee$ef                    ed           ee           ee!          fdee%         dedefd            Z&e"#                    de           ee           ee!          fde%dedefd            Z'e"#                    d           ee           ee!          fdedefd            Z(e"#                    d           ee           ee!          fde%dedefd            Z)dS )    )	APIRouterDependsHTTPExceptionQuery)Session)funcdesc)ListOptionalDictAny)get_db)Application	CandidateProjectAIAssessmentUserApplicationStatus)ApplicationStatsResponseCandidateRankingResponseCandidateRankingItem)CandidateResponse)ProjectResponse)get_current_active_userz/reportsReports)prefixtagsz/application-stats)response_modelN
project_iddbcurrent_userc                   K   |                     t                    }| r|                     t                                        t          j        | k                                              }|st          dd          |j        dk    r!|j        |j        k    rt          dd          |                    t          j	        | k              }nK|j        dk    r@|
                    t                                        t          j        |j        k              }|                                }|                    t          j        t          j        t          j                                                t          j                                                  }d |D             }|
                    t                                        t          j        t          j        t          j	                                                t          j                                                  }d |D             }	|                    t'          t          j                                                d	                                          }
|||	|
d
S )zGet application statistics  Project not foundstatus_codedetailadmin  Not enough permissionsc                 $    i | ]\  }}|j         |S  )value).0statuscounts      -/home/runner/workspace/app/routers/reports.py
<dictcomp>z)get_application_stats.<locals>.<dictcomp>2   s     UUUmfeflEUUU    c                     g | ]
\  }}||d S ))project_titler0   r,   r.   titler0   s      r1   
<listcomp>z)get_application_stats.<locals>.<listcomp>;   s4       E5  %00  r3   
   )total_applicationsapplications_by_statusapplications_by_projectrecent_applications)queryr   r   filteridfirstr   roleowner_idr   joinr0   with_entitiesr/   r   group_byallr7   order_byr	   
applied_atlimit)r   r    r!   r>   projectr:   status_countsr;   project_countsr<   r=   s              r1   get_application_statsrN      s      HH[!!E  P((7##**7:+CDDJJLL 	MC8KLLLL''G,<,O,OC8PQQQQ[3zABB		g	%	%

7##**7+;|+NOO  	K.
;;M0N0NOO	+$	%	%	 
 VU}UUU 	

7	w}dj1G&H&H	I	I	'-	 	 		  *   	tK23344	r	  1"8#:2	  r3   z /candidate-rankings/{project_id}c                   K   |                     t                                        t          j        | k                                              }|st          dd          |j        dk    r!|j        |j        k    rt          dd          |                     t                                        t          j	        | k              
                                }g }|D ]}|                     t                                        t          j        |j        k    t          j	        | k                                  t          t          j                                                            }t!          |j        |j        |r|j        nd|r|j        nd          }|                    |           |                    d	 d
           t/          | |j        |          S )z/Get AI-powered candidate rankings for a projectr#   r$   r%   r(   r)   r*   N)	candidater5   scoreassessment_summaryc                 .    | j         pd | j        j        fS )Nr   )rQ   rP   
created_at)xs    r1   <lambda>z(get_candidate_rankings.<locals>.<lambda>{   s    A(>? r3   F)keyreverse)r   r5   rankings)r>   r   r?   r@   rA   r   rB   rC   r   r   rG   r   candidate_idrH   r	   generated_atr   rP   r7   rQ   summaryappendsortr   )	r   r    r!   rK   applicationsrY   app
assessmentranking_items	            r1   get_candidate_rankingsrc   N   s      hhw&&wzZ'?@@FFHHG I4GHHHHG##(8LO(K(K4LMMMM 		&*4	5	5	  H & & HH\""V)S-==':5  Xd<45566UWW 	 ,m!-&0:*""d5?Iz11T	
 
 
 	%%%% MM??    
 $m   r3   z/dashboard-summaryc                   K   |j         dk    r5|                     t                    }|                     t                    }n|                     t                                        t          j        |j        k              }|                     t                                        t                                        t          j        |j        k              }|                                }|                                }|                     t                                                    }|                    t          j
        dk                                              }|                    t          j
        t          j        k                                              }|                    t          j
        t          j        k                                              }	|                    t          j
        t          j        k                                              }
ddlm}m} |                                 |d          z
  }|                    t          j        |k                                              }|                    t                                        t          j        t+          j        t          j                                      d                                        t          j                                      t5          d                                        d                                          }||||d	||	|
|d
d |D             dS )z$Get summary statistics for dashboardr(   openr   )datetime	timedelta   )days	app_count   )total_projectsr:   total_candidatesactive_projects)new	in_reviewadmittedrecent_applications_7_daysc                     g | ]
\  }}||d S ))r7   application_countr,   r6   s      r1   r8   z)get_dashboard_summary.<locals>.<listcomp>   s4     
 
 
u %88
 
 
r3   )r\   r_   top_projects)rB   r>   r   r   r?   rC   r@   rD   r0   r   r/   r   NEW	IN_REVIEWADMITTEDrf   rg   utcnowrI   rE   r7   r   r   labelrF   rH   r	   rJ   rG   )r    r!   projects_queryapplications_queryrl   r:   rm   rn   new_applicationsrp   rq   rf   rg   recent_dater=   ru   s                   r1   get_dashboard_summaryr      s      G##'**XXk22'**11'2Blo2UVVXXk2277@@GGHX\h\kHkll $))++N+1133xx	**0022 %++GNf,DEEKKMMO *001CGXG\1\]]ccee"))+*<@Q@[*[\\bbddI!(();?P?Y)YZZ``bbH -,,,,,,,//##iiQ&7&7&77K 	!!+"8K"GHHNNPP  	K((	w}dj1G&H&H&N&N{&[&[	\	\	'-	 	 	${##	$	$	q	  -"4 0.	
 
 $" *=	
 

 
 ,
 
 
  r3   z#/candidate-analytics/{candidate_id}rZ   c                   K   |                     t                                        t          j        | k                                              }|st          dd          |                     t                                        t          j        | k                                              }|                     t                                        t          j        | k              
                    t          t          j                                                            }t          |          }|r)t          d |D                       t          |          z  nd}i }|D ]*}	|	j        j        }
|                    |
d          dz   ||
<   +|||dt          |          t%          |d          |d	d
         ddS )z/Get detailed analytics for a specific candidater#   zCandidate not foundr%   c              3   2   K   | ]}|j         	|j         V  d S )N)rQ   )r.   as     r1   	<genexpr>z*get_candidate_analytics.<locals>.<genexpr>   s+      <<AG<AG<<<<<<r3   r      )totalstatus_distribution   N   )r0   average_scorelatest_assessments)rP   r_   ai_assessments)r>   r   r?   r@   rA   r   r   rZ   rG   r   rH   r	   r[   lensumr/   r-   getround)rZ   r    r!   rP   r_   assessmentsr:   	avg_scoreapplication_status_distributionr`   r/   s              r1   get_candidate_analyticsr      s      ##**9<<+GHHNNPPI K4IJJJJ 88K((//0HL0XYY]]__L 		)\9	:	:	$|011	2	2		  \**S^e<<[<<<<<s;?O?OOOdeI&(# e e!2Q2U2UV\^_2`2`cd2d'// '#B
 

 %%"9a00"-bqb/
 
  r3   )*fastapir   r   r   r   sqlalchemy.ormr   
sqlalchemyr   r	   typingr
   r   r   r   app.core.databaser   
app.modelsr   r   r   r   r   r   app.schemas.reportsr   r   r   app.schemas.candidater   app.schemas.projectr   app.services.authr   routerr   strintrN   rc   r   r   r,   r3   r1   <module>r      s   < < < < < < < < < < < < " " " " " " ! ! ! ! ! ! ! ! , , , , , , , , , , , , $ $ $ $ $ $ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ]          4 3 3 3 3 3 / / / / / / 5 5 5 5 5 5	*I;	7	7	7 c3h@@ %d'&// !899; ;;; ; ; ; A@;z .?WXX '&// !8994 444 4 4 4 YX4l  !!'&// !899= === = = "!=~ 122 '&// !899) ))) ) ) ) 32) ) )r3   