
    i                        d dl 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mZmZ ddlmZ ddlmZmZmZmZ d d	lmZ d d
lmZ  G d dej2                        Z edgdde eed       ed       ed      d eddi dddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d"d.d/d0d1d2d3d4d"d5d6d7d8d9d:i dd;dd<dd=dd>dd?d!d"d#d@d%d&d'dAd)dBd+dCd-d"d.d/d0d1d2d3d4d"d5d6dDd7igdEdF      gG       G dH dIe             Z edgdJdK edL       edM      dNO       G dP dQe             Z edgdRdST       G dU dVe             ZyW)X    )viewsetsstatus)APIView)IsAuthenticatedAllowAny)Response)extend_schemaOpenApiResponseOpenApiExample   )Guest)GuestSerializerCheckInSerializerCheckInResponseSerializerCheckInGuestSerializer)get_object_or_404)Bookingc                   l    e Zd ZdZej
                  j                         j                  d      Ze	Z
egZy)GuestViewSetz
    CRUD API for Guests
    z-created_atN)__name__
__module____qualname____doc__r   objectsallorder_byquerysetr   serializer_classr   permission_classes     /backend/guests/views.pyr   r      s5     }}  "++M:H&)*r!   r   zCheck-InzCheck-in form submissionz~Submit check-in form with guest details. Requires at least one main guest. All guests will be linked to the specified booking.zCheck-in successful)responsedescriptionzValidation error)r$   zBooking not found)   i    z-Check-in with main guest and additional guest	full_namezJohn Doeis_main_guestTemailzjohn.doe@example.comphonez+1234567890date_of_birthz
1990-05-15country_of_birthzUnited Statesgendermaledocument_typepassportdocument_number
P123456789document_issue_datez
2020-01-01document_expiry_datez
2030-01-01document_issuing_countrynationalityAmericanaddressz123 Main Stzip_code12345countrycityzNew York	NortheastEnglishzLate check-out if possible)regionlanguage_preferencespecial_requestszJane DoeFzjane.doe@example.comz+1234567891z
1992-08-20female
P987654321z
2021-03-15z
2031-03-15r?   )
booking_idguests)namevaluerequest_only)tagssummaryr$   request	responsesexamplesc                       e Zd ZdZegZd Zy)CheckInViewz
    API endpoint for hotel check-in form submission.
    
    - Links guests to a booking
    - Requires at least one main guest with complete information
    - Replaces any existing guest records for the booking
    c           	      `   t        |j                        }|j                         rd|j                         }|d   |d   |d   |d   dt	        |d          dd}t        |      }t        |j                  t        j                  	      S t        |j                  t        j                  	      S )
N)datarD   is_checked_inchecked_in_atrE   zCheck-in successful. z guest(s) registered.)rD   rR   rS   rE   messager   )r   rQ   is_validsavelenr   r   r   HTTP_201_CREATEDerrorsHTTP_400_BAD_REQUEST)selfrK   
serializerresultresponse_dataresponse_serializers         r"   postzCheckInView.postj   s    &GLL9
 __&F %\2!'!8!'!8 *23vh7G3H2II^_M #<M"J/44V=T=TUU
))&2M2MNNr!   N)r   r   r   r   r   r   ra   r    r!   r"   rO   rO      s    H **Or!   rO   z"Get check-in details for a bookingz5Retrieve all guests registered for a specific bookingmanyz)Booking not found or no guests registered)   r&   )rI   rJ   r$   rL   c                       e Zd ZdZegZd Zy)GetCheckInDetailsViewz,
    Get check-in details for a booking
    c                     t         j                  j                  |      j                  dd      }|j	                         st        ddit        j                        S t        |d      }t        |j                  t        j                        S )	N)rD   z-is_main_guest
created_aterrorz No guests found for this bookingrU   Trb   )r   r   filterr   existsr   r   HTTP_404_NOT_FOUNDr   rQ   HTTP_200_OK)r\   rK   rD   rE   r]   s        r"   getzGetCheckInDetailsView.get   su    %%%<EEFVXde}}<=00 
 ,F>

0B0BCCr!   N)r   r   r   r   r   r   rn   r    r!   r"   rf   rf   ~   s     **
Dr!   rf   zGet guests by booking UUIDz;Returns all guests with extra check-in fields for a booking)rI   rJ   r$   c                       e Zd ZegZd Zy)GetGuestsByBookingUUIDAPIViewc                     t        t        j                  j                  d      |      }t	        |j
                  j                         d      }t        t        |j                        |j                  d      S )NrE   )uidTrb   )booking_uidrE   )r   r   r   prefetch_relatedr   rE   r   r   strrr   rQ   )r\   rK   rs   bookingr]   s        r"   rn   z!GetGuestsByBookingUUIDAPIView.get   sa    #OO,,X6

 %W^^%7%7%9E
w{{+ oo
  	r!   N)r   r   r   r   r   rn   r    r!   r"   rp   rp      s     #
r!   rp   N)rest_frameworkr   r   rest_framework.viewsr   rest_framework.permissionsr   r   rest_framework.responser   drf_spectacular.utilsr	   r
   r   modelsr   serializersr   r   r   r   django.shortcutsr   bookings.modelsr   ModelViewSetr   rO   rf   rp   r    r!   r"   <module>r      s   + ( @ , P P  n n . #+8(( + 
& Q.-
 );<)<= 	@#Z'  !7  	
 ( +O !& ( *< .| / 3O &z "= #G  "?!" 
#$ #./8,H),#Z'  !7  	
 ( +O !( ( *< .| / 3O &z "= #G  "?!" 
#$ !+%/+.^ c2	
4BFO' OGBFO> 
0G#.)TU	DG DD& 
(M
G 
r!   