package api

import (
	"bytes"
	"encoding/json"
	"fmt"
	"strings"
	"time"
)

// APIDateTime aceita timestamps da Global API (com ou sem timezone).
type APIDateTime struct {
	time.Time
}

func (t *APIDateTime) UnmarshalJSON(b []byte) error {
	b = bytes.TrimSpace(b)
	if bytes.Equal(b, []byte("null")) || len(b) == 0 {
		t.Time = time.Time{}
		return nil
	}
	var s string
	if err := json.Unmarshal(b, &s); err != nil {
		return err
	}
	s = strings.TrimSpace(s)
	if s == "" {
		t.Time = time.Time{}
		return nil
	}
	layouts := []string{
		time.RFC3339Nano,
		time.RFC3339,
		"2006-01-02T15:04:05.999999",
		"2006-01-02T15:04:05",
	}
	var lastErr error
	for _, layout := range layouts {
		parsed, err := time.ParseInLocation(layout, s, time.UTC)
		if err == nil {
			t.Time = parsed
			return nil
		}
		lastErr = err
	}
	return fmt.Errorf("api datetime %q: %w", s, lastErr)
}
