package org.initialde.yakasave.Api;

import jakarta.validation.constraints.Min;
import org.initialde.yakasave.Application.WithdrawMoneyFromSavingsFund;
import org.initialde.yakasave.Domain.Entities.SavingsFund;
import org.initialde.yakasave.Domain.Exceptions.NotExistsSavingsFundException;
import org.initialde.yakasave.Infrastructure.Persistence.SavingsFundRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Optional;

@RestController
@RequestMapping("/savings-fund")
public class WithdrawMoneyFromSavingsFundController {
    private final SavingsFundRepository savingsFundRepository;
    private final WithdrawMoneyFromSavingsFund withdrawMoneyFromSavingsFund;

    @Autowired
    public WithdrawMoneyFromSavingsFundController(SavingsFundRepository savingsFundRepository,
                                                  WithdrawMoneyFromSavingsFund withdrawMoneyFromSavingsFund) {
        this.savingsFundRepository = savingsFundRepository;
        this.withdrawMoneyFromSavingsFund = withdrawMoneyFromSavingsFund;
    }
    @PatchMapping("/{reference}/withdraw")
    public void withDrawMoneyFromSavingsFund(@PathVariable String reference, @RequestBody @Min(100) double amount) {
        Optional<SavingsFund> savingsFundOpt = savingsFundRepository.findByReference(reference);

        if (savingsFundOpt.isEmpty()) {
            throw new NotExistsSavingsFundException();
        }
        var savingsFund = savingsFundOpt.get();
        withdrawMoneyFromSavingsFund.withDrawMoney(savingsFund, amount);
    }
}
