from rest_framework import permissions


class IsOwnerUserOnly(permissions.BasePermission):
    def has_object_permission(self, request, views, obj):
        return obj.user == request.user


class IsOwnerUserOrReadonly(permissions.BasePermission):
    # 인증된 유저에 대해 목록 조회 / 포스팅 등록 허용
    def has_permission(self, request, view):
        return request.user.is_authenticated

    # 작성자에 한해 Record에 대한 수정 / 삭제 허용
    def has_object_permission(self, request, views, obj):
        # 조회 요청은 항상 True
        if request.method in permissions.SAFE_METHODS:
            return True
        # PUT, DELETE 요청에 한해, 작성자에게만 허용
        return obj.user == request.user


class IsOwnerProfileOrReadonly(permissions.BasePermission):
    # 인증된 유저에 대해 목록 조회 / 포스팅 등록 허용
    def has_permission(self, request, view):
        return request.user.is_authenticated

    # 작성자에 한해 Record에 대한 수정 / 삭제 허용
    def has_object_permission(self, request, views, obj):
        # 조회 요청은 항상 True
        if request.method in permissions.SAFE_METHODS:
            return True
        # PUT, DELETE 요청에 한해, 작성자에게만 허용
        return obj.profile.user == request.user


class IsConfirmedUser(permissions.BasePermission):
    # 학생증 확인이 완료된 유저에게 허용
    message = 'Unconfirmed user is not allowed.'

    def has_permission(self, request, view):
        return request.user.is_confirmed_student
