package org.initialde.yakasave.Application;

import org.initialde.yakasave.Domain.Entities.SavingsFund;
import org.initialde.yakasave.Domain.Entities.User;
import org.initialde.yakasave.Domain.Exceptions.UnauthorizedMemberRemovalException;
import org.initialde.yakasave.Infrastructure.Persistence.SavingsFundRepository;
import org.initialde.yakasave.Infrastructure.authentication.AuthenticationGateway;
import org.springframework.stereotype.Service;

@Service
public class RemoveContributorFromSavingsFund {
    private final SavingsFundRepository savingsFundRepository;
    private final AuthenticationGateway authenticationGateway;

    public RemoveContributorFromSavingsFund(SavingsFundRepository savingsFundRepository,
                                            AuthenticationGateway authenticationGateway) {
        this.savingsFundRepository = savingsFundRepository;
        this.authenticationGateway = authenticationGateway;
    }

    public void remove(SavingsFund savingsFund, User contributor) {
        var authenticatedUser = authenticationGateway.getAuthenticatedUser();
        if (!savingsFund.isOwner(authenticatedUser)) {
            throw new UnauthorizedMemberRemovalException();
        }

        savingsFund.removeContributor(contributor);
        savingsFundRepository.save(savingsFund);
    }
}
