package api

import (
	"context"

	maintent "github.com/tidbcloud/devops/entity/maintenance"
)

type ListOpsExecutionWindowParam struct {
	IDs []uint64

	Page    int64
	PerPage int64
}

func (l ListOpsExecutionWindowParam) Normalize() (ListOpsExecutionWindowParam, error) {
	if len(l.IDs) > 0 && l.Page == 0 && l.PerPage == 0 {
		return l, nil
	}
	if l.Page <= 0 {
		l.Page = 1
	}
	if l.PerPage <= 0 {
		l.PerPage = 100
	}
	if l.PerPage > 100 {
		l.PerPage = 100
	}

	return l, nil
}

type CreateOpsExecutionWindowParam struct {
	StartAt int64 `json:"start_at"`
	EndAt   int64 `json:"end_at"`
}

func (l CreateOpsExecutionWindowParam) Normalize() (CreateOpsExecutionWindowParam, error) {
	return l, nil
}

type UpdateOpsExecutionWindowParam struct {
	StartAt int64 `json:"start_at"`
	EndAt   int64 `json:"end_at"`
}

func (l UpdateOpsExecutionWindowParam) Normalize() (UpdateOpsExecutionWindowParam, error) {
	return l, nil
}

type OpsExecutionWindowServiceAPI interface {
	ListOpsExecutionWindows(
		ctx context.Context,
		param ListOpsExecutionWindowParam,
	) ([]*maintent.OpsExecutionWindow, int64, error)
	GetOpsExecutionWindow(ctx context.Context, id uint64) (*maintent.OpsExecutionWindow, error)
	CreateOpsExecutionWindow(
		ctx context.Context,
		param CreateOpsExecutionWindowParam,
	) (*maintent.OpsExecutionWindow, error)
	UpdateOpsExecutionWindow(
		ctx context.Context,
		id uint64,
		param UpdateOpsExecutionWindowParam,
	) (*maintent.OpsExecutionWindow, error)
	DeleteOpsExecutionWindow(ctx context.Context, id uint64) error
}
