package controlplane

import (
	"context"
	"regexp"
	"testing"

	"github.com/DATA-DOG/go-sqlmock"
)

func TestLoadMissingNameFieldMetadataCandidatesRestrictsToCustomSettings(t *testing.T) {
	db, mock, err := sqlmock.New()
	if err != nil {
		t.Fatalf("sqlmock.New: %v", err)
	}
	defer db.Close()

	mock.ExpectQuery(regexp.QuoteMeta(`
SELECT o.Id, o.ApiName
FROM _System_Object o
WHERE COALESCE(o.IsDeleted, 0) = 0
  AND COALESCE(o.CustomSetting, 0) = 1
  AND NOT EXISTS (
    SELECT 1
    FROM _System_Field f_name
    WHERE f_name.ObjectId = o.Id
      AND COALESCE(f_name.IsDeleted, 0) = 0
      AND LOWER(f_name.ApiName) = LOWER(?)
  )
  AND NOT EXISTS (
    SELECT 1
    FROM _System_Field f_marked
    WHERE f_marked.ObjectId = o.Id
      AND COALESCE(f_marked.IsDeleted, 0) = 0
      AND COALESCE(f_marked.IsNameField, 0) = 1
  )
ORDER BY o.ApiName`)).
		WithArgs("Name").
		WillReturnRows(sqlmock.NewRows([]string{"Id", "ApiName"}).
			AddRow("obj_cs", "Countries_Region__c"))

	candidates, err := loadMissingNameFieldMetadataCandidates(context.Background(), db)
	if err != nil {
		t.Fatalf("loadMissingNameFieldMetadataCandidates: %v", err)
	}
	if len(candidates) != 1 {
		t.Fatalf("len(candidates) = %d, want 1", len(candidates))
	}
	if candidates[0].apiName != "Countries_Region__c" {
		t.Fatalf("candidate apiName = %q, want Countries_Region__c", candidates[0].apiName)
	}
	if err := mock.ExpectationsWereMet(); err != nil {
		t.Fatalf("sql expectations: %v", err)
	}
}
