package schema

import (
	"context"
	"errors"
	"io/fs"
	"os"
	"path/filepath"

	tfjson "github.com/hashicorp/terraform-json"
)

const DatabricksProvider = "registry.terraform.io/databricks/databricks"

type Schema struct {
	WorkingDir string

	ProviderSchemaFile string
}

func New() (*Schema, error) {
	wd, err := os.Getwd()
	if err != nil {
		return nil, err
	}

	tmpdir := filepath.Join(wd, "./tmp")
	err = os.MkdirAll(tmpdir, 0755)
	if err != nil {
		return nil, err
	}

	return &Schema{
		WorkingDir:         tmpdir,
		ProviderSchemaFile: filepath.Join(tmpdir, "provider.json"),
	}, nil
}

func Load(ctx context.Context) (*tfjson.ProviderSchema, error) {
	s, err := New()
	if err != nil {
		return nil, err
	}

	// Generate schema file if it doesn't exist.
	if _, err := os.Stat(s.ProviderSchemaFile); errors.Is(err, fs.ErrNotExist) {
		err = s.Generate(ctx)
		if err != nil {
			return nil, err
		}
	}

	return s.Load(ctx)
}