package back

import (
	"crypto/rand"
	"crypto/sha256"
	"encoding/base64"
	"encoding/hex"
	"time"
)

// GenerateBytes генерирует рандомный массив байтов из n элементов
func GenerateBytes(n int) ([]byte, error) {
	b := make([]byte, n)
	_, err := rand.Read(b)
	if err != nil {
		return nil, err
	}

	return b, nil
}

// GenerateString генерирует рандомную строку из n символов
func GenerateString(n int) (string, error) {
	b, err := GenerateBytes(n)
	return base64.URLEncoding.EncodeToString(b), err
}

// GenerateHash генерирует 256 битный хэш
func GenerateHash(value string) (string, error) {

	str, err := GenerateString(16)

	if err != nil {
		return "", err
	}

	hash := sha256.New()
	_, err = hash.Write([]byte(time.Now().String() + str + value))
	if err != nil {
		return "", err
	}

	return hex.EncodeToString(hash.Sum(nil)), nil

}

func getDate(dbFormat string) string {
	if len(dbFormat) < 19 {
		if len(dbFormat) < 10 {
			return "?дата?"
		}

		return dbFormat[8:10] + month[dbFormat[5:7]] + dbFormat[0:4]
	}

	return (dbFormat[8:10] + month[dbFormat[5:7]] + dbFormat[0:4] + " " + dbFormat[11:19])
}
