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

package model

import (
	"encoding/json"
	"io"

	goi18n "github.com/mattermost/go-i18n/i18n"
)

type CommandArgs struct {
	UserId          string               `json:"user_id"`
	ChannelId       string               `json:"channel_id"`
	TeamId          string               `json:"team_id"`
	RootId          string               `json:"root_id"`
	ParentId        string               `json:"parent_id"`
	TriggerId       string               `json:"trigger_id,omitempty"`
	Command         string               `json:"command"`
	SiteURL         string               `json:"-"`
	T               goi18n.TranslateFunc `json:"-"`
	UserMentions    UserMentionMap       `json:"-"`
	ChannelMentions ChannelMentionMap    `json:"-"`

	// DO NOT USE Session field is deprecated. MM-26398
	Session Session `json:"-"`
}

func (o *CommandArgs) ToJson() string {
	b, _ := json.Marshal(o)
	return string(b)
}

func CommandArgsFromJson(data io.Reader) *CommandArgs {
	var o *CommandArgs
	json.NewDecoder(data).Decode(&o)
	return o
}

// AddUserMention adds or overrides an entry in UserMentions with name username
// and identifier userId
func (o *CommandArgs) AddUserMention(username, userId string) {
	if o.UserMentions == nil {
		o.UserMentions = make(UserMentionMap)
	}

	o.UserMentions[username] = userId
}

// AddChannelMention adds or overrides an entry in ChannelMentions with name
// channelName and identifier channelId
func (o *CommandArgs) AddChannelMention(channelName, channelId string) {
	if o.ChannelMentions == nil {
		o.ChannelMentions = make(ChannelMentionMap)
	}

	o.ChannelMentions[channelName] = channelId
}
