// Copyright 2024 Matthew Rich <matthewrich.conf@gmail.com>. All rights reserved.

package resource

import (
  "context"
_ "gopkg.in/yaml.v3"
	"encoding/json"
_	"fmt"
	"gitea.rosskeen.house/rosskeen.house/machine"
)

type MockResource struct {
  InjectURI func() string
  InjectType func() string
  InjectResolveId func(ctx context.Context) string
  InjectLoadDecl func(string) error
  InjectValidate func() error
  InjectApply func() error
  InjectRead func(context.Context) ([]byte, error)
  InjectStateMachine func() machine.Stater
}

func (m *MockResource) Clone() Resource {
  return nil
}

func (m *MockResource) StateMachine() machine.Stater {
  return nil
}

func (m *MockResource) SetURI(uri string) error {
	return nil
}

func (m *MockResource) URI() string {
  return m.InjectURI()
}

func (m *MockResource) ResolveId(ctx context.Context) string {
  return m.InjectResolveId(ctx)
}

func (m *MockResource) LoadDecl(yamlResourceDeclaration string) error {
  return m.InjectLoadDecl(yamlResourceDeclaration)
}

func (m *MockResource) Validate() error {
	return m.InjectValidate()
}

func (m *MockResource) Apply() error {
  return m.InjectApply()
}

func (m *MockResource) Read(ctx context.Context) ([]byte, error) {
  return m.InjectRead(ctx)
}

func (m *MockResource) Type() string {
  return m.InjectType()
}

func (m *MockResource) UnmarshalJSON(data []byte) error {
  if err := json.Unmarshal(data, m); err != nil {
    return err
  }
  return nil
}
