package common

import (
	"fmt"
)

type NotFoundError struct {
	message string
}

type ExpectedStateError struct {
	message string
}

type NotCompletedError struct {
	message string
}

func (e *ExpectedStateError) Error() string {
	return e.message
}

func (e *NotFoundError) Error() string {
	return e.message
}

func (e *NotCompletedError) Error() string {
	return e.message
}

func NewNotFoundError(product, id string) error {
	return &NotFoundError{fmt.Sprintf("the %s %s is not found", product, id)}
}

func NewExpectedStateError(product, id string) error {
	return &ExpectedStateError{fmt.Sprintf("the %s %s not be expected state", product, id)}
}

func NewNotCompletedError(product string) error {
	return &NotCompletedError{fmt.Sprintf("%s is not completed", product)}
}

func IsNotFoundError(err error) bool {
	if _, ok := err.(*NotFoundError); ok {
		return true
	}
	return false
}

func IsExpectedStateError(err error) bool {
	if _, ok := err.(*ExpectedStateError); ok {
		return true
	}
	return false
}

func IsNotCompleteError(err error) bool {
	if _, ok := err.(*NotCompletedError); ok {
		return true
	}
	return false
}