package org.initialde.yakasave.Application;

import org.initialde.yakasave.Domain.Entities.SavingsFund;
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 WithdrawMoneyFromSavingsFund {
    private final SavingsFundRepository savingsFundRepository;
    private final AuthenticationGateway authenticationGateway;

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

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