package com.social.media.application.socialnetwork.query;

import com.social.media.domain.socialnetwork.aggregate.SocialNetwork;
import com.social.media.domain.socialnetwork.valueobject.SocialNetworkId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.Optional;

/**
 * Query service for SocialNetwork read operations
 */
public interface SocialNetworkQueryService {
    
    /**
     * Find social network by ID
     */
    Optional<SocialNetwork> findById(SocialNetworkId socialNetworkId);
    
    /**
     * Find all social networks with pagination
     */
    Page<SocialNetwork> findAll(Pageable pageable);
    
    /**
     * Find social networks by active status
     */
    Page<SocialNetwork> findByIsActive(boolean isActive, Pageable pageable);
    
    /**
     * Find social networks by name containing text
     */
    Page<SocialNetwork> findByNameContaining(String name, Pageable pageable);
    
    /**
     * Check if social network exists by name
     */
    boolean existsByName(String name);
    
    /**
     * Find social networks by type
     */
    Page<SocialNetwork> findByNetworkType(String networkType, Pageable pageable);
}

