package configmigrate

import (
	"context"
	"fmt"
)

// migrateTo6 performs the following changes:
//
//	# BEFORE:
//	'schema_version': 5
//	'clients':
//	 - # …
//	   'ip': '127.0.0.1'
//	   'mac': 'AA:AA:AA:AA:AA:AA'
//	  # …
//	# …
//
//	# AFTER:
//	'schema_version': 6
//	'clients':
//	 - # …
//	   'ip': '127.0.0.1'
//	   'mac': 'AA:AA:AA:AA:AA:AA'
//	   'ids':
//	   - '127.0.0.1'
//	   - 'AA:AA:AA:AA:AA:AA'
//	  # …
//	# …
func (m *Migrator) migrateTo6(_ context.Context, diskConf yobj) (err error) {
	diskConf["schema_version"] = 6

	clients, ok, err := fieldVal[yarr](diskConf, "clients")
	if !ok {
		return err
	}

	for i, client := range clients {
		var c yobj
		c, ok = client.(yobj)
		if !ok {
			return fmt.Errorf("unexpected type of client at index %d: %T", i, client)
		}

		ids := yarr{}
		for _, id := range []string{"ip", "mac"} {
			val, _, valErr := fieldVal[string](c, id)
			if valErr != nil {
				return fmt.Errorf("client at index %d: %w", i, valErr)
			} else if val != "" {
				ids = append(ids, val)
			}
		}

		c["ids"] = ids
	}

	return nil
}
