package pana

import (
	"encoding/json"

	ld "sourcery.dny.nu/longdistance"
	as "sourcery.dny.nu/pana/vocab/w3/activitystreams"
)

// Icon is a more constrained version of [Image] used with [as.Icon].
type Icon Image

// NewIcon initialises a new Icon.
func NewIcon() *Icon {
	return &Icon{
		Properties: make(ld.Properties),
		Type:       []string{as.TypeImage},
	}
}

// Build finalises the Icon.
func (i *Icon) Build() Icon {
	return *i
}

// See [Object.GetType].
func (i *Icon) GetType() string {
	return (*Image)(i).GetType()
}

// See [Object.SetType].
func (i *Icon) SetType() *Icon {
	(*Image)(i).SetType(as.TypeImage)
	return i
}

// GetMediaType returns the value in [as.MediaType].
func (i *Icon) GetMediaType() json.RawMessage {
	return (*Image)(i).GetMediaType()
}

// SetMediaType sets the value in [as.MediaType].
func (i *Icon) SetMediaType(v json.RawMessage) *Icon {
	(*Image)(i).SetMediaType(v)
	return i
}

// See [Object.GetURL].
func (i *Icon) GetURL() string {
	return (*Image)(i).GetURL()
}

// See [Object.SetURL].
func (i *Icon) SetURL(url string) *Icon {
	(*Image)(i).SetURL(url)
	return i
}
