U
    h	                     @   s   d dl mZmZmZmZ d dlmZmZ d dlZd dl	m
Z
mZmZmZ d dlmZmZmZ edee
eeef  e
eeef  dddZG d	d
 d
ZdS )    )capture_exceptioncapture_messageset_tagset_context)monitor_jira_apimonitor_critical_systemN)OptionalDictAnyList)JIRA_URL	JIRA_USERJIRA_API_TOKEN)	issue_keyjira_configreturnc              
      s  | st d dS |r |dtnt}|r4|dtnt|rH|dtnt|s\t d dS |dsnd| }|d	}| d
|  ddi ztdd fdd}| }|  |	 }zd|di }d|kr$t
|d tr$g fdd|d  ddd D |d d< W n tk
r<   Y nX |W S  tjjk
r~ } zt d|  W Y dS d}~X Y n< tjjk
r } zt d|  W Y dS d}~X Y nX dS )a  Fetch issue details from Jira.

    Args:
        issue_key (str): The Jira issue key
        jira_config (Optional[Dict[str, str]]): Optional Jira configuration override

    Returns:
        Optional[Dict[str, Any]]: Issue details or None if fetch fails
    u   ❌ Issue key cannot be emptyNurlusertokenu   ❌ Jira URL cannot be empty)zhttp://https://r   /z/rest/api/3/issue/Acceptapplication/jsonT)criticalc                      s   t jf ddS )N   authheaderstimeout)requestsget )r   
jira_token	jira_userr   r!   =/var/www/html/testcasegenerator.evdpl.com/jira/jira_client.pymake_jira_request.   s    z&fetch_issue.<locals>.make_jira_requestfieldsdescriptionc                    sb   t | tr| dnd }|dkr6d| kr6 | d  t | trL| dg ng D ]}| qPd S )Ntypetextcontent)
isinstancedictr    append)node	node_typechild)
text_partswalkr!   r$   r2   @   s
    zfetch_issue.<locals>.walk
c                 S   s   g | ]}|r|qS r!   r!   ).0tr!   r!   r$   
<listcomp>G   s      zfetch_issue.<locals>.<listcomp>u   ❌ Failed to fetch issue: u   ❌ Error decoding JSON: )printr    r   r   r   
startswithrstripr   raise_for_statusjsonr+   r,   join	Exceptionr   
exceptionsRequestExceptionJSONDecodeError)r   r   jira_urlr%   responsedatar&   er!   )r   r"   r#   r1   r   r2   r$   fetch_issue	   sH    

 rE   c                   @   sd   e Zd ZdZeeedddZeeeef  dddZ	de
eee  eeeef  d	d
dZdS )
JiraClientz8Jira API client for connection testing and item fetching)rA   r#   r"   c                 C   s&   | d| _|| _|| _ddi| _d S )Nr   r   r   )r9   rA   r#   r"   r   )selfrA   r#   r"   r!   r!   r$   __init__U   s    zJiraClient.__init__)r   c              
   C   sv   z:| j  d}tj|| j| jf| jdd}|  | W S  tk
rp } zt	d|  W Y dS d}~X Y nX dS )zGet current user informationz/rest/api/3/myselfr   r   u    ❌ Failed to get current user: N)
rA   r   r    r#   r"   r   r:   r;   r=   r7   )rG   r   rB   rD   r!   r!   r$   get_current_user[   s    

zJiraClient.get_current_userN)limitstatusesr   c              
   C   s   z| j  d}g }|r<ddd |D }|d| d |d d|}|d	k	r\|nd
}||dddgd}tj|| j| jf| j|dd}	|	  |		 }
|

dg W S  tk
r } ztd|  g  W Y S d	}~X Y nX d	S )zGet recent issues for suggestions
        :param limit: maximum number of issues to return (None for all)
        :param statuses: optional list of status names to filter by (e.g., ["To Do", "Ready for QA"]) 
        z/rest/api/3/searchz, c                 S   s   g | ]}d | d qS )"r!   )r4   sr!   r!   r$   r6   t   s     z0JiraClient.get_recent_issues.<locals>.<listcomp>zstatus in ()zORDER BY updated DESC Ni  summary	issuetypestatus)jqlZ
maxResultsr&   r   )r   r   r;   r   issuesu!   ❌ Failed to get recent issues: )rA   r<   r-   r   postr#   r"   r   r:   r;   r    r=   r7   )rG   rJ   rK   r   Zjql_clausesZquoted_statusesrS   Zmax_resultspayloadrB   resultrD   r!   r!   r$   get_recent_issuesk   s4    


zJiraClient.get_recent_issues)NN)__name__
__module____qualname____doc__strrH   r   r	   r
   rI   intr   rX   r!   r!   r!   r$   rF   R   s   rF   )N)utils.error_loggerr   r   r   r   Zutils.error_monitorr   r   r   typingr   r	   r
   r   config.settingsr   r   r   r]   rE   rF   r!   r!   r!   r$   <module>   s   .H