package org.initialde.yakasave.Application;

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

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

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

    public void contribute(SavingsFund savingsFund, double amount) {
        User user = authenticationGateway.getAuthenticatedUser();
        savingsFund.addContribution(user, Amount.of(amount));
        this.savingsFundRepository.save(savingsFund);
    }
}
