o
    Xg(                     @   s  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 e Zejdee dee	jee	jfd	efd
dZejdedee	jee	jfded	efddZejdedee	jee	jfded	efddZejdedee	jee	jfded	efddZejdedee	jee	jfded	efddZejdedee	jee	jfded	efddZdS )    )List)	APIRouterDependsHTTPException)Session)deps)FriendshipResponse)friendship_service/)response_modeldbc                 C   s"   t | |j}|stddd|S )z
    Retrieves the friend list for the currently logged-in user.
    Only accepted friendships are returned. 
    In each friendship record, the friend_id is the ID of the user that is _not_ the current user's ID.
    i  zNo friends found.status_codedetail)r	   Zget_extended_friend_listidr   )r   current_userZfriends r   (/app/app/api/v1/endpoints/friendships.pyget_friends
   s   
r   z/add/{friend_id}	friend_idc                 C   (   t j||j| dd}|stddd|S )u   
    현재 로그인한 사용자가 friend_id에 해당하는 사용자를 친구로 추가합니다.
    이미 해당 친구 관계가 존재하면 기존 레코드를 반환합니다.
    acceptedZuser_idr   status  zFailed to add friend.r   r	   Zcreate_friendshipr   r   r   r   r   Z
friendshipr   r   r   
add_friend   s   

r   z/request/{friend_id}c                 C   r   )u   
    friend_id에 해당하는 사용자에게 친구 요청을 보냅니다.
    요청은 pending 상태로 생성되며, 친구 목록 조회 시에도 출력될 수 있습니다.
    pendingr   r   zFailed to send friend request.r   r   r   r   r   r   send_friend_request*   s   
r   z/accept/{friend_id}c                 C      t j||j| dd}|S )u   
    friend_id에 해당하는 사용자의 친구 요청을 수락합니다.
    상태가 accepted로 업데이트되며, 응답에는 친구의 상세 정보가 포함됩니다.
    r   current_user_idr   Z
new_statusr	   Zupdate_friendship_statusr   )r   r   r   Zfriendship_responser   r   r   accept_friend_request>      
r$   z/reject/{friend_id}c                 C   r    )u   
    friend_id에 해당하는 사용자의 친구 요청을 거절합니다.
    (여기서는 거절 상태를 blocked로 처리하도록 구현합니다.)
    Zblockedr!   r#   r   r   r   r   reject_friend_requestP   r%   r&   z/{friend_id}c                 C   s&   t j||j| d}|stddd|S )u   
    friend_id에 해당하는 사용자와의 친구 관계를 'blocked' 상태로 업데이트합니다.
    실제 레코드는 데이터베이스에 남아있어 추후 로그나 분석에 활용할 수 있습니다.
    )r"   r   r   z&Failed to update friendship to blockedr   )r	   Zdelete_friendshipr   r   r   r   r   r   delete_friendb   s   
r'   N)typingr   fastapir   r   r   Zsqlalchemy.ormr   Zapp.apir   Zapp.schemas.friendshipr   Zapp.servicesr	   routergetZget_dbZget_current_userr   postintr   r   putr$   r&   deleter'   r   r   r   r   <module>   sj    