package com.hpay.hpay_mobile_api.services;

import com.hpay.hpay_mobile_api.DTO.PaysDTO;
import com.hpay.hpay_mobile_api.DTO.SuccessResponse;
import com.hpay.hpay_mobile_api.entities.Pays;
import com.hpay.hpay_mobile_api.repositories.PayRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Optional;

@Service
public class PayService {

    private final PayRepository payRepository;

    @Autowired
    public PayService(PayRepository payRepository) {
        this.payRepository = payRepository;
    }

    // Get all pays
    public List<Pays> getAllPays() {
        return (List<Pays>) payRepository.findAll();
    }

    // Get pay by ID
    public Optional<Pays> getPayById(Integer id) {
        return payRepository.findById(id);
    }

    // Create a new pay
    public Pays createPay(Pays pay) {
        return payRepository.save(pay);
    }

    // Update an existing pay
    public Pays updatePay(Integer id, Pays payDetails) {
        Pays existingPay = payRepository.findById(id).orElseThrow(() -> new RuntimeException("Pay not found"));

        existingPay.setPays(payDetails.getPays());
        existingPay.setIndicatif(payDetails.getIndicatif());
        existingPay.setPaysIso(payDetails.getPaysIso());
        existingPay.setPaysCode(payDetails.getPaysCode());
      //  existingPay.setIddevise(payDetails.getIddevise());

        return payRepository.save(existingPay);
    }


    // Delete a pay by ID
    public void deletePay(Integer id) {
        payRepository.deleteById(id);
    }


    // get pays by Name
    public List<Pays> getPayByName(String pays) {
        return payRepository.findByPays(pays);
    }


    // Récupérer tous les pays sans leurs villes
    public Object getAllPaysWithoutVilles() {
        List<PaysDTO> data = payRepository.findAllPaysWithoutVilles();
        HashMap<String, Object> map = new HashMap<>();
        map.put("data",data);
        return new SuccessResponse("list found", 200, map );
    }

}

