package com.hpay.hpay_mobile_api.services;

import com.hpay.hpay_mobile_api.entities.MessageSujet;
import com.hpay.hpay_mobile_api.repositories.MessageSujetRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.data.domain.*;
import com.hpay.hpay_mobile_api.entities.Parrainage;
import java.util.List;
import java.time.LocalDateTime;
import java.util.Optional;

@Service
public class MessageSujetService {

    @Autowired
    private MessageSujetRepository messageSujetRepository;

    public Page<MessageSujet> getMessagesByClient(Integer clientId, Pageable pageable) {
        return messageSujetRepository.findByIdClients(clientId, pageable);
    }

    public Page<MessageSujet> getMessagesByClientAndLu(Integer clientId, String lu, Pageable pageable) {
        return messageSujetRepository.findByIdClientsAndLu(clientId, lu, pageable);
    }


    public MessageSujet markAsRead(Long id) {
        Optional<MessageSujet> optionalMessage = messageSujetRepository.findById(id);
        if (optionalMessage.isPresent()) {
            MessageSujet message = optionalMessage.get();
            if (!"1".equals(message.getLu())) {
                message.setLu("1");
                message.setLuDate(LocalDateTime.now());
                return messageSujetRepository.save(message);
            }
            return message; // Déjà lu
        } else {
            throw new RuntimeException("Message non trouvé avec l'id : " + id);
        }
    }

    public long countNonLusByClient(Long clientId) {
        return messageSujetRepository.countByIdClientsAndLu(clientId, "0");
    }

    public int markAllAsReadByClient(Long clientId) {
        List<MessageSujet> unreadMessages = messageSujetRepository.findByIdClientsAndLu(clientId, "0");
        for (MessageSujet msg : unreadMessages) {
            msg.setLu("1");
            msg.setLuDate(LocalDateTime.now());
        }
        messageSujetRepository.saveAll(unreadMessages);
        return unreadMessages.size();
    }

}