import Foundation

public enum NotificationType: String, Equatable, Hashable, Codable {
    /* Included in version table */
    // v1 | v2
    case announcement // ✅ | ✅
    case clipComment = "clip_comment" //    | ✅
    case clipLike = "clip_like" // ✅ | ✅
    case clipUnlike = "clip_unlike" // ✅ |
    case codeRedeem = "code_redeem" //    | ✅
    case commentLike = "comment_like" //    | ✅
    case commentReply = "comment_reply" //    | ✅
    case commentMention = "comment_mention" //    | ✅
    case captionMention = "caption_mention" //    | ✅
    case defaultValue = "default" //    | ✅
    case delete //    | ✅
    case follow // ✅ | ✅
    case hookComment = "hook_comment" //    | ✅
    case hookCommentLike = "hook_comment_like" //    | ✅
    case hookCommentMention = "hook_comment_mention" //    | ✅
    case hookCommentReply = "hook_comment_reply" //    | ✅
    case hookCreated = "hook_created" //    | ✅
    case hookLike = "hook_like" //    | ✅
    case invite //    | ✅
    case clipRemix = "clip_remix" //    | ✅
    case inviteAccepted = "invite_accepted" //    | ✅
    case personaFavorite = "persona_favorite" //    | ✅
    case personaFollow = "persona_follow" //    | ✅
    case personaUsed = "persona_used" //    | ✅
    case playlistComment = "playlist_comment" //    | ✅
    case playlistLike = "playlist_like" // ✅ | ✅
    case playlistUnlike = "playlist_unlike" // ✅ |
    case sceneComment = "scene_comment" //    | ✅
    case sceneLike = "scene_like" // ✅ | ✅
    case sceneUnlike = "scene_unlike" // ✅
    case unfollow // ✅
    case clipCreateFollowee = "clip_create_followee" //    | ✅

    // Video Cover Hook notification types
    case videoCoverHookLike = "video_cover_hook_like" //    | ✅
    case videoCoverHookComment = "video_cover_hook_comment" //    | ✅
    case videoCoverHookCommentReply = "video_cover_hook_comment_reply" //    | ✅
    case videoCoverHookCommentMention = "video_cover_hook_comment_mention" //    | ✅
    case videoCoverHookCommentLike = "video_cover_hook_comment_like" //    | ✅

    case restrictedByDefault = "*r*" // Client only

    public var canBeRead: Bool {
        switch self {
        case .announcement,
             .clipComment,
             .clipLike,
             .codeRedeem,
             .commentLike,
             .commentReply,
             .commentMention,
             .captionMention,
             .defaultValue,
             .delete,
             .follow,
             .hookComment,
             .hookCommentLike,
             .hookCommentMention,
             .hookCommentReply,
             .hookCreated,
             .hookLike,
             .videoCoverHookLike,
             .videoCoverHookComment,
             .videoCoverHookCommentLike,
             .videoCoverHookCommentMention,
             .videoCoverHookCommentReply,
             .invite,
             .inviteAccepted,
             .personaFavorite,
             .personaFollow,
             .personaUsed,
             .playlistLike,
             .playlistComment,
             .sceneLike,
             .sceneComment,
             .clipCreateFollowee,
             .clipRemix:
            return true
        case .clipUnlike,
             .playlistUnlike,
             .sceneUnlike,
             .unfollow,
             .restrictedByDefault:
            return false
        }
    }
}
