package v1

import (
	"strconv"
	"time"

	"github.com/muety/wakapi/models"
)

type HeartbeatsViewModel struct {
	Data []*HeartbeatEntry `json:"data"`
}

// Incomplete, for now, only the subset of fields is implemented
// that is actually required for the import

type HeartbeatEntry struct {
	Id            string    `json:"id"`
	Branch        string    `json:"branch"`
	Category      string    `json:"category"`
	Entity        string    `json:"entity"`
	IsWrite       bool      `json:"is_write"`
	Language      string    `json:"language"`
	Project       string    `json:"project"`
	Time          float64   `json:"time"`
	Type          string    `json:"type"`
	UserId        string    `json:"user_id"`
	MachineNameId string    `json:"machine_name_id"`
	UserAgentId   string    `json:"user_agent_id"`
	CreatedAt     time.Time `json:"created_at"`
}

func HeartbeatsToCompat(entries []*models.Heartbeat) []*HeartbeatEntry {
	out := make([]*HeartbeatEntry, len(entries))
	for i := 0; i < len(entries); i++ {
		entry := entries[i]
		out[i] = &HeartbeatEntry{
			Id:            strconv.FormatUint(entry.ID, 10),
			Branch:        entry.Branch,
			Category:      entry.Category,
			Entity:        entry.Entity,
			IsWrite:       entry.IsWrite,
			Language:      entry.Language,
			Project:       entry.Project,
			Time:          float64(entry.Time.T().Unix()),
			Type:          entry.Type,
			UserId:        entry.UserID,
			MachineNameId: entry.Machine,
			UserAgentId:   entry.UserAgent,
			CreatedAt:     entry.CreatedAt.T(),
		}
	}
	return out
}