package channel

import "errors"

const (
	// ChannelSlugConflictCode is returned when a new channel's derived slug is
	// already used by another active channel in the same workspace.
	ChannelSlugConflictCode = "channel_slug_conflict"
	// ChannelSlugConflictMessage is the safe browser-facing message for channel
	// slug conflicts.
	ChannelSlugConflictMessage = "channel link identifier conflicts with an existing channel in this workspace"
)

// ChannelSlugConflictError preserves the generic conflict kind while giving
// channel APIs a stable code for localized client copy.
type ChannelSlugConflictError struct{}

func (ChannelSlugConflictError) Error() string {
	return ChannelSlugConflictMessage
}

func (ChannelSlugConflictError) Unwrap() error {
	return ErrConflict
}

// IsChannelSlugConflict reports whether err is a channel slug conflict.
func IsChannelSlugConflict(err error) bool {
	var slugErr ChannelSlugConflictError
	return errors.As(err, &slugErr)
}

func channelSlugConflict() error {
	return ChannelSlugConflictError{}
}
