package util

import (
	"bytes"

	log "github.com/cihub/seelog"
)

// SplitHeaderBody separates header and body of buf using provided separator sep, and stores in returnByte.
func SplitHeaderBody(buf, sep *[]byte, returnByte *[][]byte) [][]byte {
	if buf == nil {
		log.Error("Buf to split passed nil")
		return nil
	}
	if sep == nil {
		log.Error("Separator used to split passed nil")
		return nil
	}
	if returnByte == nil {
		log.Error("Return Buf to be used to store split passed nil")
		return nil
	}

	separator := *sep
	bufVal := *buf
	lenSeparator := len(separator)
	var header, body []byte
	header = *buf
	for i := 0; i < len(bufVal); i++ {
		if bytes.Equal(bufVal[i:i+lenSeparator], separator) {
			header = bufVal[0:i]
			body = bufVal[i+lenSeparator:]
			break
		}
		if i == len(bufVal)-1 {
			log.Warnf("Missing header: %s", header)
		}
	}
	returnByteVal := *returnByte
	return append(returnByteVal[:0], header, body)
}

// GetMinIntValue returns minimum between a and b.
func GetMinIntValue(a, b int) int {
	if a < b {
		return a
	}
	return b
}

// Bool return pointer to input parameter
func Bool(b bool) *bool {
	return &b
}