package billing

import (
	"encoding/json"
	"fmt"
	"io"
	"net/http"
)

type Client struct {
	client *http.Client
	addr   string
}

func New(addr string) *Client {
	return &Client{
		client: &http.Client{},
		addr:   addr,
	}
}

type SupportPlanResp struct {
	Level string `json:"level"`
}

func (c *Client) GetSupportPlan(tenantId uint64) (string, error) {
	req, err := http.NewRequest("GET",
		fmt.Sprintf("http://%s/api/v1/billing/tenants/%d/binded_support_plan", c.addr, tenantId),
		nil)
	if err != nil {
		return "", fmt.Errorf("failed to create http request, %w", err)
	}
	resp, err := c.client.Do(req)
	if err != nil {
		return "", fmt.Errorf("failed to get support plan, %w", err)
	}
	defer resp.Body.Close()
	if resp.StatusCode != http.StatusOK {
		ret, err := io.ReadAll(resp.Body)
		if err != nil {
			return "", fmt.Errorf("failed to get support plan, status code: %d, err: %w", resp.StatusCode, err)
		}
		return "", fmt.Errorf("failed to get support plan, status code: %d, msg: %s", resp.StatusCode, string(ret))
	}
	var supportPlan SupportPlanResp
	if err := json.NewDecoder(resp.Body).Decode(&supportPlan); err != nil {
		return "", fmt.Errorf("failed to decode support plan, %w", err)
	}
	return supportPlan.Level, nil
}
