package query

import (
	"github.com/caos/zitadel/internal/eventstore"
	"github.com/caos/zitadel/internal/repository/policy"
)

type PasswordAgePolicyReadModel struct {
	eventstore.ReadModel

	ExpireWarnDays uint64
	MaxAgeDays     uint64
}

func (rm *PasswordAgePolicyReadModel) Reduce() error {
	for _, event := range rm.Events {
		switch e := event.(type) {
		case *policy.PasswordAgePolicyAddedEvent:
			rm.ExpireWarnDays = e.ExpireWarnDays
			rm.MaxAgeDays = e.MaxAgeDays
		case *policy.PasswordAgePolicyChangedEvent:
			if e.ExpireWarnDays != nil {
				rm.ExpireWarnDays = *e.ExpireWarnDays
			}
			if e.MaxAgeDays != nil {
				rm.MaxAgeDays = *e.MaxAgeDays
			}
		}
	}
	return rm.ReadModel.Reduce()
}