// Copyright 2022 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.

package bots

import (
	"context"
	"time"

	"code.gitea.io/gitea/models/db"
	"code.gitea.io/gitea/modules/timeutil"
)

// TaskStep represents a step of Task
type TaskStep struct {
	ID        int64
	Name      string
	TaskID    int64  `xorm:"index unique(task_number)"`
	Number    int64  `xorm:"index unique(task_number)"`
	Status    Status `xorm:"index"`
	LogIndex  int64
	LogLength int64
	Started   timeutil.TimeStamp
	Stopped   timeutil.TimeStamp
	Created   timeutil.TimeStamp `xorm:"created"`
	Updated   timeutil.TimeStamp `xorm:"updated"`
}

func (TaskStep) TableName() string {
	return "bots_task_step"
}

func (step *TaskStep) TakeTime() time.Duration {
	if step.Started == 0 {
		return 0
	}
	started := step.Started.AsTime()
	if step.Status.IsDone() {
		return step.Stopped.AsTime().Sub(started)
	}
	step.Stopped.AsTime().Sub(started)
	return time.Since(started).Truncate(time.Second)
}

func init() {
	db.RegisterModel(new(TaskStep))
}

func GetTaskStepsByTaskID(ctx context.Context, taskID int64) ([]*TaskStep, error) {
	var steps []*TaskStep
	return steps, db.GetEngine(ctx).Where("task_id=?", taskID).OrderBy("number").Find(&steps)
}
