package model

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

func (m *sqlModel) ConfigureMissingSessions(ctx context.Context, gen func() SessionConfig) error {
	tx := m.db.MustBeginTx(ctx, &sql.TxOptions{})
	defer tx.Rollback()

	q := `
		SELECT
			peer_routers.peer_id "peer_id",
			peer_routers.id "id"
		FROM peer_routers
		WHERE peer_routers.id NOT IN (
			SELECT session_configs.peer_router_id
			FROM session_configs
		)
	`
	missing := []struct {
		PeerID string `db:"peer_id"`
		ID     string `db:"id"`
	}{}
	if err := m.db.SelectContext(ctx, &missing, q); err != nil {
		return fmt.Errorf("SELECT peerRouters: %v", err)
	}

	for _, m := range missing {
		config := gen()
		q = `
			INSERT INTO
				session_configs 
				(peer_id, peer_router_id, bgp_secret)
			VALUES
				(:peer_id, :peer_router_id, :bgp_secret)
		`
		data := sqlSessionConfig{
			PeerID:       m.PeerID,
			PeerRouterID: m.ID,
			BGPSecret:    config.BGPSecret,
		}
		if _, err := tx.NamedExecContext(ctx, q, data); err != nil {
			return err
		}
	}

	return tx.Commit()
}
