package models

import "go-nkode/config"

type NKodePolicy struct {
	MaxNkodeLen        int `json:"max_nkode_len"`
	MinNkodeLen        int `json:"min_nkode_len"`
	DistinctSets       int `json:"distinct_sets"`
	DistinctAttributes int `json:"distinct_attributes"`
	LockOut            int `json:"lock_out"`
	Expiration         int `json:"expiration"` // seconds, -1 no expiration
}

func NewDefaultNKodePolicy() NKodePolicy {
	return NKodePolicy{
		MinNkodeLen:        4,
		MaxNkodeLen:        4,
		DistinctSets:       0,
		DistinctAttributes: 4,
		LockOut:            5,
		Expiration:         -1,
	}
}

func (p *NKodePolicy) ValidLength(nkodeLen int) error {

	if nkodeLen < p.MinNkodeLen || nkodeLen > p.MaxNkodeLen {
		return config.ErrInvalidNKodeLength
	}
	// TODO: validate Max > Min
	// Validate lockout
	// Add Lockout To User
	return nil
}
