// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.

package model

const (
	// used to assign the work template id to newly created channels
	WorkTemplateIDChannelProp = "work_template_id"

	// Visibility
	WorkTemplateVisibilityPublic  = "public"
	WorkTemplateVisibilityPrivate = "private"
)

type WorkTemplateCategory struct {
	ID   string `json:"id"`
	Name string `json:"name"`
}

type WorkTemplate struct {
	ID           string                   `json:"id"`
	Category     string                   `json:"category"`
	UseCase      string                   `json:"useCase"`
	Illustration string                   `json:"illustration"`
	Visibility   string                   `json:"visibility"`
	FeatureFlag  *WorkTemplateFeatureFlag `json:"featureFlag,omitempty"`
	Description  Description              `json:"description"`
	Content      []WorkTemplateContent    `json:"content"`
}

type WorkTemplateFeatureFlag struct {
	Name  string `json:"name"`
	Value string `json:"value"`
}

type DescriptionContent struct {
	Message      string `json:"message"`
	Illustration string `json:"illustration"`
}

type Description struct {
	Channel     *DescriptionContent `json:"channel"`
	Board       *DescriptionContent `json:"board"`
	Playbook    *DescriptionContent `json:"playbook"`
	Integration *DescriptionContent `json:"integration"`
}

type WorkTemplateChannel struct {
	ID           string `json:"id"`
	Name         string `json:"name"`
	Purpose      string `json:"purpose"`
	Playbook     string `json:"playbook"`
	Illustration string `json:"illustration"`
}

type WorkTemplateBoard struct {
	ID           string `json:"id"`
	Template     string `json:"template"`
	Name         string `json:"name"`
	Channel      string `json:"channel"`
	Illustration string `json:"illustration"`
}

type WorkTemplatePlaybook struct {
	Template     string `json:"template"`
	Name         string `json:"name"`
	ID           string `json:"id"`
	Illustration string `json:"illustration"`
}

type WorkTemplateIntegration struct {
	ID string `json:"id"`
}

type WorkTemplateContent struct {
	Channel     *WorkTemplateChannel     `json:"channel,omitempty"`
	Board       *WorkTemplateBoard       `json:"board,omitempty"`
	Playbook    *WorkTemplatePlaybook    `json:"playbook,omitempty"`
	Integration *WorkTemplateIntegration `json:"integration,omitempty"`
}

type WorkTemplateExecutionResult struct {
	ChannelWithPlaybookIDs []string `json:"channel_with_playbook_ids"`
	ChannelIDs             []string `json:"channel_ids"`
}
