package models

import (
	"encoding/json"
	"gogs.mikescher.com/BlackForestBytes/goext/timeext"
	"time"
)

type SCNDuration time.Duration

func (t SCNDuration) MarshalToDB(v SCNDuration) (int64, error) {
	return v.Duration().Milliseconds(), nil
}

func (t SCNDuration) UnmarshalToModel(v int64) (SCNDuration, error) {
	return SCNDuration(timeext.FromMilliseconds(v)), nil
}

func (t SCNDuration) Duration() time.Duration {
	return time.Duration(t)
}

func (t *SCNDuration) UnmarshalJSON(data []byte) error {
	flt := float64(0)
	if err := json.Unmarshal(data, &flt); err != nil {
		return err
	}
	d0 := timeext.FromSeconds(flt)
	*t = SCNDuration(d0)
	return nil
}

func (t SCNDuration) MarshalJSON() ([]byte, error) {
	return json.Marshal(t.Duration().Seconds())
}