package model

import (
	"context"
	"database/sql"
	"fmt"

	"github.com/golang/glog"
)

func (s *sqlModel) SubmitPeerCheckResults(ctx context.Context, res []*PeerCheckResult) error {
	tx := s.db.MustBeginTx(ctx, &sql.TxOptions{})
	defer tx.Rollback()

	q := `
		UPDATE peer_checks
		SET delete = true
	`
	if _, err := tx.ExecContext(ctx, q); err != nil {
		return fmt.Errorf("UPDATE for deletion peer_checks: %v", err)
	}

	seenASNs := make(map[int64]bool)

	for _, pcr := range res {
		seenASNs[pcr.PeerASN] = true

		q = `
			INSERT INTO peer_checks
				(peer_id, check_name, check_time, check_status, check_message, delete)
			SELECT
				peers.id, :check_name, :check_time, :check_status, :check_message, false
			FROM peers
			WHERE peers.asn = :asn
			ON CONFLICT (peer_id, check_name)
			DO UPDATE SET
				check_time = :check_time,
				check_status = :check_status,
				check_message = :check_message,
				delete = false
		`
		status := "uknown"
		switch pcr.Status {
		case PeerCheckStatus_Okay:
			status = "okay"
		case PeerCheckStatus_Failed:
			status = "failed"
		case PeerCheckStatus_SoftFailed:
			glog.Infof("Skipping soft failure: %+v", pcr)
			continue
		}
		cr := sqlPeerCheck{
			CheckName:    pcr.CheckName,
			CheckTime:    pcr.Time.UnixNano(),
			CheckStatus:  status,
			CheckMessage: pcr.Message,
			ASN:          fmt.Sprintf("%d", pcr.PeerASN),
		}
		if _, err := tx.NamedExecContext(ctx, q, cr); err != nil {
			return fmt.Errorf("INSERT peer_checks: %v", err)
		}
	}

	q = `
		DELETE FROM peer_checks
		WHERE delete = true
	`
	if _, err := tx.ExecContext(ctx, q); err != nil {
		return fmt.Errorf("DELETE FROM peer_checks: %v", err)
	}

	return tx.Commit()
}
