package entities

import "encoding/json"

func UnmarshalMediumResponse(data []byte) (MediumResponse, error) {
	var r MediumResponse
	err := json.Unmarshal(data, &r)
	return r, err
}

func (r *MediumResponse) Marshal() ([]byte, error) {
	return json.Marshal(r)
}

type MediumResponse struct {
	Data Data `json:"data"`
}

type Data struct {
	Post Post `json:"post"`
}

type Post struct {
	Title     string  `json:"title"`
	CreatedAt int64   `json:"createdAt"`
	Creator   Creator `json:"creator"`
	Content   Content `json:"content"`
}

type Content struct {
	BodyModel BodyModel `json:"bodyModel"`
}

type BodyModel struct {
	Paragraphs []Paragraph `json:"paragraphs"`
}

type MediaResource struct {
	Href         string `json:"href"`
	IframeSrc    string `json:"iframeSrc"`
	IframeWidth  int64  `json:"iframeWidth"`
	IframeHeight int64  `json:"iframeHeight"`
}

type Iframe struct {
	MediaResource MediaResource `json:"mediaResource"`
}

type Paragraph struct {
	Name     string      `json:"name"`
	Text     string      `json:"text"`
	Type     Type        `json:"type"`
	Href     interface{} `json:"href"`
	Layout   *string     `json:"layout"`
	Markups  []Markup    `json:"markups"`
	Iframe   *Iframe     `json:"iframe"`
	Metadata *Metadata   `json:"metadata"`
}

type Markup struct {
	Title      *string     `json:"title"`
	Type       string      `json:"type"`
	Href       *string     `json:"href"`
	UserID     interface{} `json:"userId"`
	Start      int64       `json:"start"`
	End        int64       `json:"end"`
	AnchorType *string     `json:"anchorType"`
}

type Metadata struct {
	ID             string `json:"id"`
	OriginalWidth  int64  `json:"originalWidth"`
	OriginalHeight int64  `json:"originalHeight"`
}

type Creator struct {
	ID   string `json:"id"`
	Name string `json:"name"`
}

type Type string

const (
	H3  Type = "H3"
	H4  Type = "H4"
	Img Type = "IMG"
	P   Type = "P"
	Pre Type = "PRE"
)