package handler

import (
	"net/http"
	"strconv"

	"github.com/google/uuid"
	jsonpbcodec "go.unistack.org/micro-codec-jsonpb/v3"
	"go.unistack.org/micro/v3/codec"
	"go.unistack.org/micro/v3/logger"
	"go.unistack.org/pkgdash/internal/storage"
	pb "go.unistack.org/pkgdash/proto"
)

type Handler struct {
	logger logger.Logger
	store  storage.Storage
	codec  codec.Codec
}

func NewNotFoundError(err error) *pb.ErrorRsp {
	return &pb.ErrorRsp{
		Code:    strconv.Itoa(http.StatusBadRequest),
		Title:   "NotFound",
		Uuid:    uuid.New().String(),
		Details: err.Error(),
	}
}

func NewInternalError(err error) *pb.ErrorRsp {
	return &pb.ErrorRsp{
		Code:    strconv.Itoa(http.StatusInternalServerError),
		Title:   "InternalServerError",
		Uuid:    uuid.New().String(),
		Details: err.Error(),
	}
}

func NewValidationError(err error) *pb.ErrorRsp {
	return &pb.ErrorRsp{
		Code:    strconv.Itoa(http.StatusBadRequest),
		Title:   "BadRequest",
		Uuid:    uuid.New().String(),
		Details: err.Error(),
	}
}

func NewHandler(log logger.Logger, store storage.Storage) (*Handler, error) {
	h := &Handler{
		logger: log,
		codec:  jsonpbcodec.NewCodec(),
		store:  store,
	}

	return h, nil
}
