package api

import (
	"github.com/gin-gonic/gin"
	"github.com/pingcap/dbaas/billing2/forms"
	"github.com/pingcap/dbaas/billing2/model/payment/paymentsub"
	"github.com/pingcap/dbaas/billing2/utils/ginutils"
)

// @GetFxRate
// @Schemes
// @Accept json
// @Produce json
// @Param base query forms.Currency false "base"
// @Param target query forms.Currency false "target"
// @Success 200 {object} forms.InvoiceAppliedFXRate
// @Router /fx_rates [GET]
func (s *API) GetInvoiceAppliedFX(c *gin.Context) (ginutils.HandlerFuncResult, error) {
	var query struct {
		Base   forms.Currency `form:"base"`
		Target forms.Currency `form:"target"`
	}
	err := c.ShouldBindQuery(&query)
	if err != nil {
		return nil, err
	}
	return (&paymentsub.FXRateModel{}).GetInvoiceAppliedFX(query.Base, query.Target)
}

// @CreateInvoiceAppliedFx
// @Schemes
// @Accept json
// @Produce json
// @Param fx body forms.InvoiceAppliedFXRate false "fx"
// @Success 200 {object} forms.InvoiceAppliedFXRate
// @Router /fx_rates [POST]
func (s *API) CreateInvoiceAppliedFX(c *gin.Context) (ginutils.HandlerFuncResult, error) {
	var in forms.InvoiceAppliedFXRate
	err := c.ShouldBindJSON(&in)
	if err != nil {
		return nil, err
	}
	return (&paymentsub.FXRateModel{}).CreateInvoiceAppliedFX(&in)
}

func InitializeFXRateRouter(router ginutils.MyRoute) {
	s := &API{}
	router.HandleWithError("GET", "/fx_rates", s.GetInvoiceAppliedFX)
	router.HandleWithError("POST", "/fx_rates", s.CreateInvoiceAppliedFX)
}
