package utils

import (
	"encoding/hex"
	"encoding/json"
	"fmt"
	"primesys_producer/src/logger"
	"strings"
	"time"
)

// convert hex to string
func HexUpper(b []byte) string {
	return strings.ToUpper(hex.EncodeToString(b))
}

func HexByteUpper(b byte) string {
	return strings.ToUpper(hex.EncodeToString([]byte{b}))
}
func DecodeStringToByte(s string) []byte {
	data, err := hex.DecodeString(s)

	if err != nil {
		logger.Fatal("Error in Parsing Bytes")
		panic(err)
	}
	return data
}

func ByteToString(b []byte) string {
	var sb strings.Builder
	sb.Grow(len(b) * 2)
	for _, by := range b {
		fmt.Fprintf(&sb, "%02X", by)
	}
	return sb.String()
}

func ToEpochSecond() int64 {
	return time.Now().Unix()
}

func ToEpochISTSecond() int64 {
	ist, _ := time.LoadLocation("Asia/Kolkata")
	return time.Now().In(ist).Unix()
}

func IndianTime() time.Time {
	loc, err := time.LoadLocation("Asia/Kolkata")
	if err != nil {
		return time.Now()
	}
	return time.Now().In(loc)
}

func StructToJsonString(object any) (string, error) {

	jsonBytes, err := json.Marshal(object)

	if err != nil {
		return "", fmt.Errorf("Error in creating json from struct")
	}

	jsonString := string(jsonBytes)
	return jsonString, nil
}

func DateTimeBytes() []byte {
	now := time.Now()

	year := byte(now.Year() % 100)
	month := byte(now.Month())
	day := byte(now.Day())
	hour := byte(now.Hour())
	min := byte(now.Minute())
	sec := byte(now.Second())

	return []byte{
		year,
		month, day, hour, min, sec,
	}
}
