package storage

import (
	"context"
	"fmt"

	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

const blobServiceURLTmpl = "https://%s.blob.core.windows.net/"

type BlobStorage struct {
	dataCli *azblob.Client
}

func NewAzureBlobStorage(storageAccount string) (Storage, error) {
	cred, err := azidentity.NewDefaultAzureCredential(nil)
	if err != nil {
		return nil, err
	}
	dataCli, err := azblob.NewClient(fmt.Sprintf(blobServiceURLTmpl, storageAccount), cred, nil)
	if err != nil {
		return nil, err
	}
	return &BlobStorage{
		dataCli: dataCli,
	}, nil
}
func (s *BlobStorage) LoadObject(bucket string, key string) ([]byte, error) {
	buf := make([]byte, 0)
	_, err := s.dataCli.DownloadBuffer(context.TODO(), bucket, key, buf, nil)
	if err != nil {
		return nil, err
	}
	return buf, nil
}
func (s *BlobStorage) UploadObject(bucket string, key string, data []byte) error {
	_, err := s.dataCli.UploadBuffer(context.TODO(), bucket, key, data, nil)
	if err != nil {
		return err
	}
	return nil
}
