package entity

import (
	"errors"
	"time"

	"go.mongodb.org/mongo-driver/v2/bson"
)

type AutoID struct {
	ID       bson.ObjectID `bson:"_id,omitempty" json:"id,omitempty"`
	Name     string        `bson:"name,omitempty" json:"name,omitempty"`
	Counter  uint64        `bson:"counter" json:"counter"`
	UpdateAt *int64        `bson:"update_at,omitempty" json:"update_at,omitempty"`
	CreateAt *int64        `bson:"create_at,omitempty" json:"create_at,omitempty"`
}

func (a *AutoID) CollectionName() string {
	return "count"
}

// Validate validates the AutoID entity
func (a *AutoID) Validate() error {
	if a.Name == "" {
		return errors.New("name is required")
	}
	return nil
}

// SetTimestamps sets the create and update timestamps
func (a *AutoID) SetTimestamps() {
	now := time.Now().UTC().UnixNano()
	if a.CreateAt == nil {
		a.CreateAt = &now
	}
	a.UpdateAt = &now
}

// IsNew returns true if this is a new counter (no ID set)
func (a *AutoID) IsNew() bool {
	return a.ID.IsZero()
}

// GetIDString returns the ID as a hex string
func (a *AutoID) GetIDString() string {
	return a.ID.Hex()
}

// Increment increments the counter by 1
func (a *AutoID) Increment() {
	a.Counter++
	a.SetTimestamps()
}
