package command

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

type IdentityProviderWriteModel struct {
	eventstore.WriteModel

	IDPConfigID     string
	IDPProviderType domain.IdentityProviderType
	State           domain.IdentityProviderState
}

func (wm *IdentityProviderWriteModel) Reduce() error {
	for _, event := range wm.Events {
		switch e := event.(type) {
		case *policy.IdentityProviderAddedEvent:
			wm.IDPConfigID = e.IDPConfigID
			wm.IDPProviderType = e.IDPProviderType
			wm.State = domain.IdentityProviderStateActive
		case *policy.IdentityProviderRemovedEvent:
			wm.State = domain.IdentityProviderStateRemoved
		case *policy.LoginPolicyRemovedEvent:
			wm.State = domain.IdentityProviderStateRemoved
		}
	}
	return wm.WriteModel.Reduce()
}