package storage

import (
	"math"

	"gitlab.com/mstarongitlab/goutils/other"
)

var DefaultUserRole = Role{
	Name:       "Default",
	Priority:   0,
	IsUserRole: false,
	IsBuiltIn:  true,

	CanSendMedia:             other.IntoPointer(true),
	CanSendCustomEmotes:      other.IntoPointer(true),
	CanSendCustomReactions:   other.IntoPointer(true),
	CanSendPublicNotes:       other.IntoPointer(true),
	CanSendLocalNotes:        other.IntoPointer(true),
	CanSendFollowerOnlyNotes: other.IntoPointer(true),
	CanSendPrivateNotes:      other.IntoPointer(true),
	CanQuote:                 other.IntoPointer(true),
	CanBoost:                 other.IntoPointer(true),
	CanIncludeLinks:          other.IntoPointer(true),
	CanIncludeSurvey:         other.IntoPointer(true),

	CanChangeDisplayName: other.IntoPointer(true),

	BlockedUsers:     []string{},
	CanSubmitReports: other.IntoPointer(true),
	CanLogin:         other.IntoPointer(true),

	CanMentionOthers:     other.IntoPointer(true),
	HasMentionCountLimit: other.IntoPointer(false),
	MentionLimit:         other.IntoPointer(uint32(math.MaxUint32)), // Set this to max, even if not used due to *HasMentionCountLimit == false

	AutoNsfwMedia:                  other.IntoPointer(false),
	AutoCwPosts:                    other.IntoPointer(false),
	AutoCwPostsText:                nil,
	WithholdNotesForManualApproval: other.IntoPointer(false),
	ScanCreatedPublicNotes:         other.IntoPointer(false),
	ScanCreatedLocalNotes:          other.IntoPointer(false),
	ScanCreatedFollowerOnlyNotes:   other.IntoPointer(false),
	ScanCreatedPrivateNotes:        other.IntoPointer(false),
	DisallowInteractionsWith:       []string{},

	FullAdmin:                          other.IntoPointer(false),
	CanAffectOtherAdmins:               other.IntoPointer(false),
	CanDeleteNotes:                     other.IntoPointer(false),
	CanConfirmWithheldNotes:            other.IntoPointer(false),
	CanAssignRoles:                     other.IntoPointer(false),
	CanSupressInteractionsBetweenUsers: other.IntoPointer(false),
	CanOverwriteDisplayNames:           other.IntoPointer(false),
	CanManageCustomEmotes:              other.IntoPointer(false),
	CanViewDeletedNotes:                other.IntoPointer(false),
	CanRecoverDeletedNotes:             other.IntoPointer(false),
	CanManageAvatarDecorations:         other.IntoPointer(false),
	CanManageAds:                       other.IntoPointer(false),
	CanSendAnnouncements:               other.IntoPointer(false),
}

var fullAdminRole = Role{
	Name:       "fullAdmin",
	Priority:   math.MaxUint,
	IsUserRole: false,
	IsBuiltIn:  true,

	CanSendMedia:             other.IntoPointer(true),
	CanSendCustomEmotes:      other.IntoPointer(true),
	CanSendCustomReactions:   other.IntoPointer(true),
	CanSendPublicNotes:       other.IntoPointer(true),
	CanSendLocalNotes:        other.IntoPointer(true),
	CanSendFollowerOnlyNotes: other.IntoPointer(true),
	CanSendPrivateNotes:      other.IntoPointer(true),
	CanQuote:                 other.IntoPointer(true),
	CanBoost:                 other.IntoPointer(true),
	CanIncludeLinks:          other.IntoPointer(true),
	CanIncludeSurvey:         other.IntoPointer(true),

	CanChangeDisplayName: other.IntoPointer(true),

	BlockedUsers:     []string{},
	CanSubmitReports: other.IntoPointer(true),
	CanLogin:         other.IntoPointer(true),

	CanMentionOthers:     other.IntoPointer(true),
	HasMentionCountLimit: other.IntoPointer(false),
	MentionLimit:         other.IntoPointer(uint32(math.MaxUint32)), // Set this to max, even if not used due to *HasMentionCountLimit == false

	AutoNsfwMedia:                  other.IntoPointer(false),
	AutoCwPosts:                    other.IntoPointer(false),
	AutoCwPostsText:                nil,
	WithholdNotesForManualApproval: other.IntoPointer(false),
	ScanCreatedPublicNotes:         other.IntoPointer(false),
	ScanCreatedLocalNotes:          other.IntoPointer(false),
	ScanCreatedFollowerOnlyNotes:   other.IntoPointer(false),
	ScanCreatedPrivateNotes:        other.IntoPointer(false),
	DisallowInteractionsWith:       []string{},

	FullAdmin:                          other.IntoPointer(true),
	CanAffectOtherAdmins:               other.IntoPointer(true),
	CanDeleteNotes:                     other.IntoPointer(true),
	CanConfirmWithheldNotes:            other.IntoPointer(true),
	CanAssignRoles:                     other.IntoPointer(true),
	CanSupressInteractionsBetweenUsers: other.IntoPointer(true),
	CanOverwriteDisplayNames:           other.IntoPointer(true),
	CanManageCustomEmotes:              other.IntoPointer(true),
	CanViewDeletedNotes:                other.IntoPointer(true),
	CanRecoverDeletedNotes:             other.IntoPointer(true),
	CanManageAvatarDecorations:         other.IntoPointer(true),
	CanManageAds:                       other.IntoPointer(true),
	CanSendAnnouncements:               other.IntoPointer(true),
}

var allDefaultRoles = []*Role{
	&DefaultUserRole,
	&fullAdminRole,
}
