package com.social.media.application.company.query;

import com.social.media.domain.company.aggregate.Company;
import com.social.media.domain.company.valueobject.CompanyId;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.Optional;

/**
 * Query service for Company read operations
 */
public interface CompanyQueryService {
    
    /**
     * Find company by ID
     */
    Optional<Company> findById(CompanyId companyId);
    
    /**
     * Find all companies with pagination
     */
    Page<Company> findAll(Pageable pageable);
    
    /**
     * Find companies by name containing text
     */
    Page<Company> findByNameContaining(String name, Pageable pageable);
    
    /**
     * Find companies by status
     */
    Page<Company> findByStatus(String status, Pageable pageable);
    
    /**
     * Find companies by plan
     */
    Page<Company> findByPlan(String plan, Pageable pageable);
    
    /**
     * Check if company exists by email
     */
    boolean existsByEmail(String email);
    
    /**
     * Check if company exists by name
     */
    boolean existsByName(String name);
}

