package com.social.media.application.user.handler;

import com.social.media.application.user.command.ResetPasswordCommand;
import com.social.media.domain.user.aggregate.User;
import com.social.media.domain.user.repository.UserRepository;
import com.social.media.domain.shared.exception.BusinessRuleViolationException;
import com.social.media.domain.shared.valueobject.Email;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.UUID;

@Service
public class ResetPasswordCommandHandler {
    
    private final UserRepository userRepository;
    
    public ResetPasswordCommandHandler(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    
    @Transactional
    public void handle(ResetPasswordCommand command) {
        Email email = new Email(command.email());
        User user = userRepository.findByEmail(email)
            .orElseThrow(() -> new BusinessRuleViolationException("User not found with email: " + command.email()));
        
        // Generate reset token
        String resetToken = UUID.randomUUID().toString();
        LocalDateTime resetExpiry = LocalDateTime.now().plusHours(1); // Token expires in 1 hour
        
        // Set reset token and expiry
        user.setPasswordResetToken(resetToken, resetExpiry);
        
        userRepository.save(user);
        
        // TODO: Send email with reset token
        // For now, we'll just log it (in production, send an actual email)
        System.out.println("Password reset token for " + command.email() + ": " + resetToken);
        System.out.println("Reset link: http://localhost:4200/forgot-password?token=" + resetToken);
    }
}
