o
    ɶJh                     @   s~  d dl 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
mZmZmZmZ d dlmZmZ d dlmZmZmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZ d dlmZ d dl Z e
 Z!edddZ"ee"fde#fddZ$dd Z%de#fddZ&G dd deZ'dd Z(dd Z)de#fddZ*e!+d ed!ee$fd"e'd#e#fd$d%Z,e!+d&ee$fd"e#d#e#fd'd(Z-dS ))    N)datetime	timedelta)Optional)defaultdict)FastAPIBodyDependsHTTPExceptionstatus)OAuth2PasswordBearerOAuth2PasswordRequestForm)	BaseModelEmailStrconint)APIKeyHeader)JWTErrorjwt)CryptContext)Settingsz	X-API-KeyF)name
auto_errorapi_key_headerc                 C   s   | t jkr| S ttjdd)NzInvalid or missing API Key)status_codedetail)r   SECRET_API_KEYr	   r
   HTTP_401_UNAUTHORIZED)r    r   ;/var/www/html/ts.yecor.com/AIML-WorkLogs-Automation/main.pyget_api_key   s   
r   c                   C   s   t jjtjtjtjtjdS )N)hostuserpassworddatabase)mysql	connectorconnectr   DB_HOSTDB_USERDB_PASSWORDDB_NAMEr   r   r   r   connect_to_db   s   r*   emailc                 C   s<   t  }|jdd}|d| f | }|  |  |S )NT)
dictionaryz+SELECT * FROM kimai2_users WHERE email = %s)r*   cursorexecutefetchoneclose)r+   
connectionr-   r    r   r   r   get_user'   s   r2   c                   @   s6   e Zd ZU eed< eddded< eddded< d	S )
TimeLogRequestEmail      )geleMonthi  i4  YearN)__name__
__module____qualname__r   __annotations__r   r   r   r   r   r3   1   s   
 r3   c                 C   s@   t  }| }d}||| ||f | }|  |  |S )Na  SELECT
    t.user AS user,
    t.activity_id AS activity,
    t.project_id AS project,
    t.description AS Description,
    u.username,
    p.name AS project_name,
    a.name AS activity_name
FROM
    kimai2_timesheet t
JOIN
    kimai2_users u ON t.user = u.id
JOIN
    kimai2_projects p ON t.project_id = p.id
JOIN
    kimai2_activities a ON t.activity_id = a.id
WHERE
    t.description IS NOT NULL
    AND p.name NOT IN ('Break')
    AND a.name NOT IN ('NO WORK')
    AND u.email = %s
    AND MONTH(t.start_time) = %s
    AND YEAR(t.start_time) = %s
GROUP BY
    t.user, t.activity_id, t.project_id, t.description, u.username, p.name, a.name
)r*   r-   r.   fetchallr0   )
user_emailmonthyearr1   r-   queryrowsr   r   r   
fetch_data6   s   rE   c                 C   s   t dd }| D ]\}}}}}}}|| | | qg }| D ]!\}}	g }
|	 D ]\}}|
|t|d q+|||
d q!|S )Nc                   S   s   t tS )N)r   setr   r   r   r   <lambda>Z   s    zorganize_data.<locals>.<lambda>)r   descriptions)projectactivity)r   additemsappendlist)rD   project_data_rJ   rI   descriptionproject_nameactivity_nameresult
activitiesactivity_listrH   r   r   r   organize_dataY   s    

rW   rT   c                 C   s4   t j}tj|d}d|  d}|jjd|d}|jS )N)api_keyuA  
    Instruction:  
    Convert the following tasks into professional report sentences using action verbs. Merge similar or duplicate tasks, but keep the original order and headings.
    
    Rules:   
    - Replace only “mam” or “madam” with “Ma'am”; leave all other titles as-is.  
    - Do not change technical terms, syntax, tags, or code.  
    Very Important:
    Preserve all original syntax, formatting, and structural elements used in code, markup, or specialized languages (e.g., HTML, XML, LaTeX, Markdown).
    Do not remove, modify, or restructure any tags, symbols, or domain-specific syntax.
    Return only the cleaned content in the exact structure and format as the input — do not add headings, titles, newlines(
), summaries, or explanations 
    before or after the output.
    
    Project details:z
    zgemini-1.5-flash-latest)modelcontents)r   GEMINI_API_KEYgenaiClientmodelsgenerate_contenttext)rT   keyclientpromptresponser   r   r   summarize_datal   s   re   z/getTimeLogs.requestrX   c                 C   s   t | j| j| j}t|}|S )z
    API endpoint to fetch and organize project data for a given user email, month, and year.
    Requires static API Key authentication.
    )rE   r4   r9   r:   rW   )rf   rX   rD   rO   r   r   r   getTimeLogs   s   	rg   z/getSummarizedDatac                 C   s   t | }dd|iiS )z
    Processes and refines raw project task data.
    Improves grammar, eliminates duplicate entries, and structures tasks in a clear, point-wise format.
    Maintains original project and activity titles, and standardizes references to individuals.
    rd   rQ   )re   )rf   rX   summarized_datar   r   r   getSummarizedData   s
   ri   ).osr   r   typingr   mysql.connectorr#   collectionsr   fastapir   r   r   r	   r
   fastapi.securityr   r   pydanticr   r   r   r   joser   r   passlib.contextr   core.configr   google.genair\   jsonappr   strr   r*   r2   r3   rE   rW   re   postrg   ri   r   r   r   r   <module>   sH   
#