package cvt

import (
	"encoding/json"
	"strings"
	"time"

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

	"github.com/tidbcloud/devops/models/base"
	maintmod "github.com/tidbcloud/devops/models/maintenance"
)

type e2m struct{}

func (cvt e2m) ClusterMaintenance(e *maintent.ClusterMaintenanceInRepo) *maintmod.ClusterMaintenance {
	return &maintmod.ClusterMaintenance{
		Updatable: base.Updatable{
			Base: base.Base{ID: base.ID(e.ID)},
		},
		LarkNotifiedAt:           e.LarkNotifiedAt,
		InstanceID:               e.InstanceID,
		LastNotifiedCustomerDate: e.LastNotifiedCustomerDate,
		ScheduledApplyTime:       e.ScheduledApplyTime,
	}
}

func (cvt e2m) ClusterOpsMaintenanceWindow(e *maintent.ClusterOpsMaintenanceWindow) *maintmod.ClusterOpsMaintenanceWindow {
	m := &maintmod.ClusterOpsMaintenanceWindow{
		Updatable: base.Updatable{
			Base: base.Base{ID: base.ID(e.ID)},
		},
		ClusterID: e.ClusterID,
	}

	data, err := json.Marshal(e.Windows)
	if err != nil {
		panic(err)
	}
	m.Windows = data
	m.Approvers = strings.Join(e.Approvers, ",")

	return m
}

func (cvt e2m) OpsExecutionWindow(e *maintent.OpsExecutionWindow) *maintmod.OpsExecutionWindow {
	return &maintmod.OpsExecutionWindow{
		Updatable: base.Updatable{
			Base: base.Base{ID: base.ID(e.ID)},
		},
		StartAt: time.Unix(e.StartAt, 0),
		EndAt:   time.Unix(e.EndAt, 0),
	}
}
