package storage

import (
	"github.com/pingcap/schrodinger/pkg/types"
)

func (m *mysqlClient) listUnAlertedExperiments() ([]*types.ExperimentProcess, error) {
	rows, err := m.db.Queryx(listUnAlertedExperimentsQuery)

	if err != nil {
		return nil, err
	}

	return scanExperimentRows(rows)
}

func (m *mysqlClient) updateNotifyTime(ep *types.ExperimentProcess) error {
	_, err := m.db.NamedExec("REPLACE INTO notifier_mgr (experiment_id, last_notify_time) VALUES (:id, NOW())", map[string]interface{}{
		"id": ep.ID,
	})

	return err
}

const listUnAlertedExperimentsQuery = `
SELECT 
id
,labels
,name
,namespace
,box
,box_name
,creator
,box_index
,destroyed
,create_time
,update_time
,start_time
,end_time
,fail_time
,state
,stage
,author
,annotation
,cat_count
,config
,report FROM experiment
	LEFT JOIN notifier_mgr
	ON id = notifier_mgr.experiment_id
	WHERE state = "ABNORMAL" AND (destroyed = 0) AND
	(notifier_mgr.last_notify_time IS NULL 
		OR notifier_mgr.last_notify_time < NOW() - INTERVAL 1 DAY);
`
