package mastodon

import (
	"encoding/json"
	"fmt"
	"strconv"
)

type ID string

func (id *ID) UnmarshalJSON(data []byte) error {
	if len(data) > 0 && data[0] == '"' && data[len(data)-1] == '"' {
		var s string
		if err := json.Unmarshal(data, &s); err != nil {
			return err
		}
		*id = ID(s)
		return nil
	}
	var n int64
	if err := json.Unmarshal(data, &n); err != nil {
		return err
	}
	*id = ID(fmt.Sprint(n))
	return nil
}

type Sbool bool

func (s *Sbool) UnmarshalJSON(data []byte) error {
	if len(data) > 0 && data[0] == '"' && data[len(data)-1] == '"' {
		var str string
		if err := json.Unmarshal(data, &str); err != nil {
			return err
		}
		b, err := strconv.ParseBool(str)
		if err != nil {
			return err
		}
		*s = Sbool(b)
		return nil
	}
	var b bool
	if err := json.Unmarshal(data, &b); err != nil {
		return err
	}
	*s = Sbool(b)
	return nil
}