// Copyright (c) Dropbox, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

// Package team_policies : has no documentation (yet)
package team_policies

import "github.com/dropbox/dropbox-sdk-go-unofficial/v6/dropbox"

// CameraUploadsPolicyState : has no documentation (yet)
type CameraUploadsPolicyState struct {
	dropbox.Tagged
}

// Valid tag values for CameraUploadsPolicyState
const (
	CameraUploadsPolicyStateDisabled = "disabled"
	CameraUploadsPolicyStateEnabled  = "enabled"
	CameraUploadsPolicyStateOther    = "other"
)

// ComputerBackupPolicyState : has no documentation (yet)
type ComputerBackupPolicyState struct {
	dropbox.Tagged
}

// Valid tag values for ComputerBackupPolicyState
const (
	ComputerBackupPolicyStateDisabled = "disabled"
	ComputerBackupPolicyStateEnabled  = "enabled"
	ComputerBackupPolicyStateDefault  = "default"
	ComputerBackupPolicyStateOther    = "other"
)

// DefaultLinkExpirationDaysPolicy : Policy governing default expiration date
// for new links shared outside the team.
type DefaultLinkExpirationDaysPolicy struct {
	dropbox.Tagged
}

// Valid tag values for DefaultLinkExpirationDaysPolicy
const (
	DefaultLinkExpirationDaysPolicyNone   = "none"
	DefaultLinkExpirationDaysPolicyDay1   = "day_1"
	DefaultLinkExpirationDaysPolicyDay3   = "day_3"
	DefaultLinkExpirationDaysPolicyDay7   = "day_7"
	DefaultLinkExpirationDaysPolicyDay30  = "day_30"
	DefaultLinkExpirationDaysPolicyDay90  = "day_90"
	DefaultLinkExpirationDaysPolicyDay180 = "day_180"
	DefaultLinkExpirationDaysPolicyYear1  = "year_1"
	DefaultLinkExpirationDaysPolicyOther  = "other"
)

// EmmState : has no documentation (yet)
type EmmState struct {
	dropbox.Tagged
}

// Valid tag values for EmmState
const (
	EmmStateDisabled = "disabled"
	EmmStateOptional = "optional"
	EmmStateRequired = "required"
	EmmStateOther    = "other"
)

// EnforceLinkPasswordPolicy : Policy governing whether new links shared outside
// the team require passwords.
type EnforceLinkPasswordPolicy struct {
	dropbox.Tagged
}

// Valid tag values for EnforceLinkPasswordPolicy
const (
	EnforceLinkPasswordPolicyOptional = "optional"
	EnforceLinkPasswordPolicyRequired = "required"
	EnforceLinkPasswordPolicyOther    = "other"
)

// ExternalDriveBackupPolicyState : has no documentation (yet)
type ExternalDriveBackupPolicyState struct {
	dropbox.Tagged
}

// Valid tag values for ExternalDriveBackupPolicyState
const (
	ExternalDriveBackupPolicyStateDisabled = "disabled"
	ExternalDriveBackupPolicyStateEnabled  = "enabled"
	ExternalDriveBackupPolicyStateDefault  = "default"
	ExternalDriveBackupPolicyStateOther    = "other"
)

// FileLockingPolicyState : has no documentation (yet)
type FileLockingPolicyState struct {
	dropbox.Tagged
}

// Valid tag values for FileLockingPolicyState
const (
	FileLockingPolicyStateDisabled = "disabled"
	FileLockingPolicyStateEnabled  = "enabled"
	FileLockingPolicyStateOther    = "other"
)

// FileProviderMigrationPolicyState : has no documentation (yet)
type FileProviderMigrationPolicyState struct {
	dropbox.Tagged
}

// Valid tag values for FileProviderMigrationPolicyState
const (
	FileProviderMigrationPolicyStateDisabled  = "disabled"
	FileProviderMigrationPolicyStateEnabled   = "enabled"
	FileProviderMigrationPolicyStateDefault   = "default"
	FileProviderMigrationPolicyStateImmediate = "immediate"
	FileProviderMigrationPolicyStateOther     = "other"
)

// GroupCreation : has no documentation (yet)
type GroupCreation struct {
	dropbox.Tagged
}

// Valid tag values for GroupCreation
const (
	GroupCreationAdminsAndMembers = "admins_and_members"
	GroupCreationAdminsOnly       = "admins_only"
)

// OfficeAddInPolicy : has no documentation (yet)
type OfficeAddInPolicy struct {
	dropbox.Tagged
}

// Valid tag values for OfficeAddInPolicy
const (
	OfficeAddInPolicyDisabled = "disabled"
	OfficeAddInPolicyEnabled  = "enabled"
	OfficeAddInPolicyOther    = "other"
)

// PaperDefaultFolderPolicy : has no documentation (yet)
type PaperDefaultFolderPolicy struct {
	dropbox.Tagged
}

// Valid tag values for PaperDefaultFolderPolicy
const (
	PaperDefaultFolderPolicyEveryoneInTeam = "everyone_in_team"
	PaperDefaultFolderPolicyInviteOnly     = "invite_only"
	PaperDefaultFolderPolicyOther          = "other"
)

// PaperDeploymentPolicy : has no documentation (yet)
type PaperDeploymentPolicy struct {
	dropbox.Tagged
}

// Valid tag values for PaperDeploymentPolicy
const (
	PaperDeploymentPolicyFull    = "full"
	PaperDeploymentPolicyPartial = "partial"
	PaperDeploymentPolicyOther   = "other"
)

// PaperDesktopPolicy : has no documentation (yet)
type PaperDesktopPolicy struct {
	dropbox.Tagged
}

// Valid tag values for PaperDesktopPolicy
const (
	PaperDesktopPolicyDisabled = "disabled"
	PaperDesktopPolicyEnabled  = "enabled"
	PaperDesktopPolicyOther    = "other"
)

// PaperEnabledPolicy : has no documentation (yet)
type PaperEnabledPolicy struct {
	dropbox.Tagged
}

// Valid tag values for PaperEnabledPolicy
const (
	PaperEnabledPolicyDisabled    = "disabled"
	PaperEnabledPolicyEnabled     = "enabled"
	PaperEnabledPolicyUnspecified = "unspecified"
	PaperEnabledPolicyOther       = "other"
)

// PasswordControlMode : has no documentation (yet)
type PasswordControlMode struct {
	dropbox.Tagged
}

// Valid tag values for PasswordControlMode
const (
	PasswordControlModeDisabled = "disabled"
	PasswordControlModeEnabled  = "enabled"
	PasswordControlModeOther    = "other"
)

// PasswordStrengthPolicy : has no documentation (yet)
type PasswordStrengthPolicy struct {
	dropbox.Tagged
}

// Valid tag values for PasswordStrengthPolicy
const (
	PasswordStrengthPolicyMinimalRequirements = "minimal_requirements"
	PasswordStrengthPolicyModeratePassword    = "moderate_password"
	PasswordStrengthPolicyStrongPassword      = "strong_password"
	PasswordStrengthPolicyOther               = "other"
)

// RolloutMethod : has no documentation (yet)
type RolloutMethod struct {
	dropbox.Tagged
}

// Valid tag values for RolloutMethod
const (
	RolloutMethodUnlinkAll             = "unlink_all"
	RolloutMethodUnlinkMostInactive    = "unlink_most_inactive"
	RolloutMethodAddMemberToExceptions = "add_member_to_exceptions"
)

// SharedFolderBlanketLinkRestrictionPolicy : Policy governing whether shared
// folder membership is required to access shared links.
type SharedFolderBlanketLinkRestrictionPolicy struct {
	dropbox.Tagged
}

// Valid tag values for SharedFolderBlanketLinkRestrictionPolicy
const (
	SharedFolderBlanketLinkRestrictionPolicyMembers = "members"
	SharedFolderBlanketLinkRestrictionPolicyAnyone  = "anyone"
	SharedFolderBlanketLinkRestrictionPolicyOther   = "other"
)

// SharedFolderJoinPolicy : Policy governing which shared folders a team member
// can join.
type SharedFolderJoinPolicy struct {
	dropbox.Tagged
}

// Valid tag values for SharedFolderJoinPolicy
const (
	SharedFolderJoinPolicyFromTeamOnly = "from_team_only"
	SharedFolderJoinPolicyFromAnyone   = "from_anyone"
	SharedFolderJoinPolicyOther        = "other"
)

// SharedFolderMemberPolicy : Policy governing who can be a member of a folder
// shared by a team member.
type SharedFolderMemberPolicy struct {
	dropbox.Tagged
}

// Valid tag values for SharedFolderMemberPolicy
const (
	SharedFolderMemberPolicyTeam            = "team"
	SharedFolderMemberPolicyAnyone          = "anyone"
	SharedFolderMemberPolicyTeamAndApproved = "team_and_approved"
	SharedFolderMemberPolicyOther           = "other"
)

// SharedLinkCreatePolicy : Policy governing the visibility of shared links.
// This policy can apply to newly created shared links, or all shared links.
type SharedLinkCreatePolicy struct {
	dropbox.Tagged
}

// Valid tag values for SharedLinkCreatePolicy
const (
	SharedLinkCreatePolicyDefaultPublic   = "default_public"
	SharedLinkCreatePolicyDefaultTeamOnly = "default_team_only"
	SharedLinkCreatePolicyTeamOnly        = "team_only"
	SharedLinkCreatePolicyDefaultNoOne    = "default_no_one"
	SharedLinkCreatePolicyOther           = "other"
)

// SharedLinkDefaultPermissionsPolicy : has no documentation (yet)
type SharedLinkDefaultPermissionsPolicy struct {
	dropbox.Tagged
}

// Valid tag values for SharedLinkDefaultPermissionsPolicy
const (
	SharedLinkDefaultPermissionsPolicyDefault = "default"
	SharedLinkDefaultPermissionsPolicyEdit    = "edit"
	SharedLinkDefaultPermissionsPolicyView    = "view"
	SharedLinkDefaultPermissionsPolicyOther   = "other"
)

// ShowcaseDownloadPolicy : has no documentation (yet)
type ShowcaseDownloadPolicy struct {
	dropbox.Tagged
}

// Valid tag values for ShowcaseDownloadPolicy
const (
	ShowcaseDownloadPolicyDisabled = "disabled"
	ShowcaseDownloadPolicyEnabled  = "enabled"
	ShowcaseDownloadPolicyOther    = "other"
)

// ShowcaseEnabledPolicy : has no documentation (yet)
type ShowcaseEnabledPolicy struct {
	dropbox.Tagged
}

// Valid tag values for ShowcaseEnabledPolicy
const (
	ShowcaseEnabledPolicyDisabled = "disabled"
	ShowcaseEnabledPolicyEnabled  = "enabled"
	ShowcaseEnabledPolicyOther    = "other"
)

// ShowcaseExternalSharingPolicy : has no documentation (yet)
type ShowcaseExternalSharingPolicy struct {
	dropbox.Tagged
}

// Valid tag values for ShowcaseExternalSharingPolicy
const (
	ShowcaseExternalSharingPolicyDisabled = "disabled"
	ShowcaseExternalSharingPolicyEnabled  = "enabled"
	ShowcaseExternalSharingPolicyOther    = "other"
)

// SmartSyncPolicy : has no documentation (yet)
type SmartSyncPolicy struct {
	dropbox.Tagged
}

// Valid tag values for SmartSyncPolicy
const (
	SmartSyncPolicyLocal    = "local"
	SmartSyncPolicyOnDemand = "on_demand"
	SmartSyncPolicyOther    = "other"
)

// SmarterSmartSyncPolicyState : has no documentation (yet)
type SmarterSmartSyncPolicyState struct {
	dropbox.Tagged
}

// Valid tag values for SmarterSmartSyncPolicyState
const (
	SmarterSmartSyncPolicyStateDisabled = "disabled"
	SmarterSmartSyncPolicyStateEnabled  = "enabled"
	SmarterSmartSyncPolicyStateOther    = "other"
)

// SsoPolicy : has no documentation (yet)
type SsoPolicy struct {
	dropbox.Tagged
}

// Valid tag values for SsoPolicy
const (
	SsoPolicyDisabled = "disabled"
	SsoPolicyOptional = "optional"
	SsoPolicyRequired = "required"
	SsoPolicyOther    = "other"
)

// SuggestMembersPolicy : has no documentation (yet)
type SuggestMembersPolicy struct {
	dropbox.Tagged
}

// Valid tag values for SuggestMembersPolicy
const (
	SuggestMembersPolicyDisabled = "disabled"
	SuggestMembersPolicyEnabled  = "enabled"
	SuggestMembersPolicyOther    = "other"
)

// TeamMemberPolicies : Policies governing team members.
type TeamMemberPolicies struct {
	// Sharing : Policies governing sharing.
	Sharing *TeamSharingPolicies `json:"sharing"`
	// EmmState : This describes the Enterprise Mobility Management (EMM) state
	// for this team. This information can be used to understand if an
	// organization is integrating with a third-party EMM vendor to further
	// manage and apply restrictions upon the team's Dropbox usage on mobile
	// devices. This is a new feature and in the future we'll be adding more new
	// fields and additional documentation.
	EmmState *EmmState `json:"emm_state"`
	// OfficeAddin : The admin policy around the Dropbox Office Add-In for this
	// team.
	OfficeAddin *OfficeAddInPolicy `json:"office_addin"`
	// SuggestMembersPolicy : The team policy on if teammembers are allowed to
	// suggest users for admins to invite to the team.
	SuggestMembersPolicy *SuggestMembersPolicy `json:"suggest_members_policy"`
	// TopLevelContentPolicy : Policy for deciding whether members can edit team
	// folders at the top level of the team space.
	TopLevelContentPolicy *TopLevelContentPolicy `json:"top_level_content_policy"`
}

// NewTeamMemberPolicies returns a new TeamMemberPolicies instance
func NewTeamMemberPolicies(Sharing *TeamSharingPolicies, EmmState *EmmState, OfficeAddin *OfficeAddInPolicy, SuggestMembersPolicy *SuggestMembersPolicy, TopLevelContentPolicy *TopLevelContentPolicy) *TeamMemberPolicies {
	s := new(TeamMemberPolicies)
	s.Sharing = Sharing
	s.EmmState = EmmState
	s.OfficeAddin = OfficeAddin
	s.SuggestMembersPolicy = SuggestMembersPolicy
	s.TopLevelContentPolicy = TopLevelContentPolicy
	return s
}

// TeamSharingPolicies : Policies governing sharing within and outside of the
// team.
type TeamSharingPolicies struct {
	// SharedFolderMemberPolicy : Who can join folders shared by team members.
	SharedFolderMemberPolicy *SharedFolderMemberPolicy `json:"shared_folder_member_policy"`
	// SharedFolderJoinPolicy : Which shared folders team members can join.
	SharedFolderJoinPolicy *SharedFolderJoinPolicy `json:"shared_folder_join_policy"`
	// SharedLinkCreatePolicy : Who can view shared links owned by team members.
	SharedLinkCreatePolicy *SharedLinkCreatePolicy `json:"shared_link_create_policy"`
	// GroupCreationPolicy : Who can create groups.
	GroupCreationPolicy *GroupCreation `json:"group_creation_policy"`
	// SharedFolderLinkRestrictionPolicy : Who can view links to content in
	// shared folders.
	SharedFolderLinkRestrictionPolicy *SharedFolderBlanketLinkRestrictionPolicy `json:"shared_folder_link_restriction_policy"`
	// EnforceLinkPasswordPolicy : If passwords are required for new links
	// shared outside the team.
	EnforceLinkPasswordPolicy *EnforceLinkPasswordPolicy `json:"enforce_link_password_policy"`
	// DefaultLinkExpirationDaysPolicy : Default expiration date for new links
	// shared outside the team.
	DefaultLinkExpirationDaysPolicy *DefaultLinkExpirationDaysPolicy `json:"default_link_expiration_days_policy"`
	// SharedLinkDefaultPermissionsPolicy : Default access level for new links
	// shared by team members.
	SharedLinkDefaultPermissionsPolicy *SharedLinkDefaultPermissionsPolicy `json:"shared_link_default_permissions_policy"`
}

// NewTeamSharingPolicies returns a new TeamSharingPolicies instance
func NewTeamSharingPolicies(SharedFolderMemberPolicy *SharedFolderMemberPolicy, SharedFolderJoinPolicy *SharedFolderJoinPolicy, SharedLinkCreatePolicy *SharedLinkCreatePolicy, GroupCreationPolicy *GroupCreation, SharedFolderLinkRestrictionPolicy *SharedFolderBlanketLinkRestrictionPolicy, EnforceLinkPasswordPolicy *EnforceLinkPasswordPolicy, DefaultLinkExpirationDaysPolicy *DefaultLinkExpirationDaysPolicy, SharedLinkDefaultPermissionsPolicy *SharedLinkDefaultPermissionsPolicy) *TeamSharingPolicies {
	s := new(TeamSharingPolicies)
	s.SharedFolderMemberPolicy = SharedFolderMemberPolicy
	s.SharedFolderJoinPolicy = SharedFolderJoinPolicy
	s.SharedLinkCreatePolicy = SharedLinkCreatePolicy
	s.GroupCreationPolicy = GroupCreationPolicy
	s.SharedFolderLinkRestrictionPolicy = SharedFolderLinkRestrictionPolicy
	s.EnforceLinkPasswordPolicy = EnforceLinkPasswordPolicy
	s.DefaultLinkExpirationDaysPolicy = DefaultLinkExpirationDaysPolicy
	s.SharedLinkDefaultPermissionsPolicy = SharedLinkDefaultPermissionsPolicy
	return s
}

// TopLevelContentPolicy : has no documentation (yet)
type TopLevelContentPolicy struct {
	dropbox.Tagged
}

// Valid tag values for TopLevelContentPolicy
const (
	TopLevelContentPolicyAdminOnly = "admin_only"
	TopLevelContentPolicyEveryone  = "everyone"
	TopLevelContentPolicyOther     = "other"
)

// TwoStepVerificationPolicy : has no documentation (yet)
type TwoStepVerificationPolicy struct {
	dropbox.Tagged
}

// Valid tag values for TwoStepVerificationPolicy
const (
	TwoStepVerificationPolicyRequireTfaEnable  = "require_tfa_enable"
	TwoStepVerificationPolicyRequireTfaDisable = "require_tfa_disable"
	TwoStepVerificationPolicyOther             = "other"
)

// TwoStepVerificationState : has no documentation (yet)
type TwoStepVerificationState struct {
	dropbox.Tagged
}

// Valid tag values for TwoStepVerificationState
const (
	TwoStepVerificationStateRequired = "required"
	TwoStepVerificationStateOptional = "optional"
	TwoStepVerificationStateDisabled = "disabled"
	TwoStepVerificationStateOther    = "other"
)
