package utils

import (
	"net/url"

	"github.com/pingcap/dbaas/central/db/entity"
	"github.com/pingcap/errors"
)

func ValidteS3URL(s string) error {
	u, err := url.Parse(s)
	if err != nil {
		return errors.AddStack(err)
	}

	if u.Scheme != "s3" {
		return errors.Errorf("source url schema should be s3, but is: %s", u.Scheme)
	}

	return nil
}

func ValidateGSURL(s string) error {
	u, err := url.Parse(s)
	if err != nil {
		return errors.AddStack(err)
	}

	if u.Scheme != "gcs" {
		return errors.Errorf("source url schema should be gcs, but is: %s", u.Scheme)
	}

	return nil
}

func ValidateBucketURL(sourceType uint32, sourceURL string) error {
	switch entity.DataSource(sourceType) {
	case entity.DataSourceTypeS3:
		err := ValidteS3URL(sourceURL)
		if err != nil {
			return err
		}
	case entity.DataSourceTypeGCS:
		err := ValidateGSURL(sourceURL)
		if err != nil {
			return err
		}
	default:
		return errors.Errorf("unsupported source type type: %d", sourceType)
	}

	return nil
}
