package model

import "errors"

type KeypadDimension struct {
	AttrsPerKey int `json:"attrs_per_key"`
	NumbOfKeys  int `json:"numb_of_keys"`
}

func (kp *KeypadDimension) TotalAttrs() int {
	return kp.AttrsPerKey * kp.NumbOfKeys
}

func (kp *KeypadDimension) IsDispersable() bool {
	return kp.AttrsPerKey <= kp.NumbOfKeys
}

func (kp *KeypadDimension) IsValidKeypadDimension() error {
	if KeypadMin.AttrsPerKey > kp.AttrsPerKey || KeypadMax.AttrsPerKey < kp.AttrsPerKey || KeypadMin.NumbOfKeys > kp.NumbOfKeys || KeypadMax.NumbOfKeys < kp.NumbOfKeys {
		return errors.New("keypad dimensions out of range")
	}
	return nil
}

var (
	KeypadMax = KeypadDimension{
		AttrsPerKey: 16,
		NumbOfKeys:  15,
	}

	KeypadMin = KeypadDimension{
		AttrsPerKey: 6,
		NumbOfKeys:  5,
	}

	KeypadDefault = KeypadDimension{
		AttrsPerKey: 14,
		NumbOfKeys:  7,
	}
)
