package object

import (
	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object"
	"git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/refs"
	oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
)

type ECChunk object.ECChunk

func (c *ECChunk) SetID(id oid.ID) {
	objV2 := new(refs.ObjectID)
	id.WriteToV2(objV2)
	c.ID = *objV2
}

// ToV2 converts ECChunk to v2 ECChunk message.
//
// Nil ECChunk converts to nil.
func (c *ECChunk) ToV2() *object.ECChunk {
	return (*object.ECChunk)(c)
}

func NewECChunkFromV2(v2 *object.ECChunk) *ECChunk {
	return (*ECChunk)(v2)
}

type ECInfo object.ECInfo

// NewECInfoFromV2 wraps v2 ECInfo message to ECInfo.
//
// Nil object.ECInfo converts to nil.
func NewECInfoFromV2(v2 *object.ECInfo) *ECInfo {
	return (*ECInfo)(v2)
}

// NewECInfo creates and initializes blank ECInfo.
func NewECInfo() *ECInfo {
	return NewECInfoFromV2(new(object.ECInfo))
}

// ToV2 converts ECInfo to v2 ECInfo message.
//
// Nil ECInfo converts to nil.
func (s *ECInfo) ToV2() *object.ECInfo {
	return (*object.ECInfo)(s)
}

func (s *ECInfo) Marshal() ([]byte, error) {
	return (*object.ECInfo)(s).StableMarshal(nil), nil
}

func (s *ECInfo) Unmarshal(data []byte) error {
	return (*object.ECInfo)(s).Unmarshal(data)
}

// MarshalJSON implements json.Marshaler.
func (s *ECInfo) MarshalJSON() ([]byte, error) {
	return (*object.ECInfo)(s).MarshalJSON()
}

// UnmarshalJSON implements json.Unmarshaler.
func (s *ECInfo) UnmarshalJSON(data []byte) error {
	return (*object.ECInfo)(s).UnmarshalJSON(data)
}

func (s *ECInfo) AddChunk(chunk ECChunk) {
	s.Chunks = append(s.Chunks, *chunk.ToV2())
}