package com.social.media.application.user.query;

import com.social.media.domain.user.aggregate.User;
import com.social.media.domain.user.valueobject.UserId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.Optional;

/**
 * Query service for User read operations
 */
public interface UserQueryService {
    
    /**
     * Find user by ID
     */
    Optional<User> findById(UserId userId);
    
    /**
     * Find all users with pagination
     */
    Page<User> findAll(Pageable pageable);
    
    /**
     * Find users by company ID
     */
    Page<User> findByCompanyId(Long companyId, Pageable pageable);
    
    /**
     * Find users by type
     */
    Page<User> findByUserType(String userType, Pageable pageable);
    
    /**
     * Find users by email
     */
    Optional<User> findByEmail(String email);
    
    /**
     * Check if user exists by email
     */
    boolean existsByEmail(String email);
    
    /**
     * Check if user exists by CPF
     */
    boolean existsByCpf(String cpf);
}

