package kp

import (
	"context"
	"fmt"
	"time"
)

const (
	path = "key_rings"
)

type KeyRing struct {
	ID           string     `json:"id,omitempty"`
	CreationDate *time.Time `json:"creationDate,omitempty"`
	CreatedBy    string     `json:"createdBy,omitempty"`
}

type KeyRings struct {
	Metadata KeysMetadata `json:"metadata"`
	KeyRings    []KeyRing       `json:"resources"`
}

// CreateRing method creates a key ring in the instance with the provided name
// For information please refer to the link below:
// https://cloud.ibm.com/docs/key-protect?topic=key-protect-managing-key-rings#create-key-ring-api
func (c *Client) CreateKeyRing(ctx context.Context, id string) error {

	req, err := c.newRequest("POST", fmt.Sprintf(path+"/%s", id), nil)
	if err != nil {
		return err
	}

	_, err = c.do(ctx, req, nil)
	if err != nil {
		return err
	}

	return nil
}

// GetRings method retrieves all the key rings associated with the instance
// For information please refer to the link below:
// https://cloud.ibm.com/docs/key-protect?topic=key-protect-managing-key-rings#list-key-ring-api
func (c *Client) GetKeyRings(ctx context.Context) (*KeyRings, error) {
	rings := KeyRings{}
	req, err := c.newRequest("GET", path, nil)
	if err != nil {
		return nil, err
	}

	_, err = c.do(ctx, req, &rings)
	if err != nil {
		return nil, err
	}

	return &rings, nil
}

// DeleteRing method deletes the key ring with the provided name in the instance
// For information please refer to the link below:
// https://cloud.ibm.com/docs/key-protect?topic=key-protect-managing-key-rings#delete-key-ring-api
func (c *Client) DeleteKeyRing(ctx context.Context, id string) error {
	req, err := c.newRequest("DELETE", fmt.Sprintf(path+"/%s", id), nil)
	if err != nil {
		return err
	}

	_, err = c.do(ctx, req, nil)
	if err != nil {
		return err
	}

	return nil
}