package model

import (
	"fmt"
	"strconv"
	"time"

	"github.com/dchest/siphash"
)

// compute the hash of a source code string
func HashSource(source string) uint64{
	return siphash.Hash(0, 0, []byte(source))
}

// format a hash value as a hexidecimal string
func HashFormat(hash uint64) string{
	return fmt.Sprintf("%016x", hash)
}

// parse a hexidecimal hash string
func HashParse(hash string) (uint64, error){
	return strconv.ParseUint(hash, 16, 64)
}

type ResourceType int32
const (
	ResourceUnknown    ResourceType = 0
	ResourceMapfix     ResourceType = 1
	ResourceSubmission ResourceType = 2
)

type Script struct {
	ID           int64 `gorm:"primaryKey"`
	Name         string
	Hash         int64 // postgres does not support unsigned integers, so we have to pretend
	Source       string
	ResourceType ResourceType // is this a submission or is it a mapfix
	ResourceID   int64 // which submission / mapfix did this script first appear in
	CreatedAt    time.Time
	UpdatedAt    time.Time
}