package main

import (
	"context"
	"fmt"
	"slices"

	"github.com/pingcap-inc/trino-thrift-connectors/gen-go/trino"
	"github.com/pingcap-inc/trino-thrift-connectors/schema"
	"github.com/samber/lo"
)

func (s *ClinicService) selectSchemaHandler(
	ctx context.Context,
	schema string,
) (schema.SchemaHandler, error) {
	for _, h := range s.handlers {
		tbs, err := h.ListTables(ctx)
		if err != nil {
			return nil, err
		}
		schemas := lo.Map(tbs, func(t *trino.TrinoThriftTableMetadata, i int) string {
			return t.SchemaTableName.SchemaName
		})
		if slices.Contains(schemas, schema) {
			return h, nil
		}
	}
	return nil, fmt.Errorf("unknown schema: %s", schema)
}
