package registry

import (
	"enterprise/common/model"
	"github.com/spf13/cast"
)

var (
	salaryFactory map[string]SalaryCalculatorFactory
)

func init() {
	salaryFactory = make(map[string]SalaryCalculatorFactory)
}

type SalaryCalculator interface {
	Calculate(salary *model.StaffSalary) map[string]interface{}
}

type SalaryCalculatorFactory func(corp *model.Corp, user *model.StaffUser) SalaryCalculator

func RegisterSalaryCalculator(key string, factory SalaryCalculatorFactory) {
	salaryFactory[key] = factory
}

func NewSalaryCalculator(corp *model.Corp, user *model.StaffUser) SalaryCalculator {
	factory := salaryFactory[cast.ToString(corp.Id)+"_"+user.Username]
	if factory == nil {
		factory = salaryFactory[cast.ToString(corp.Id)]
	}
	if factory == nil {
		return nil
	}
	return factory(corp, user)
}