package com.social.media.application.company.service;

import com.social.media.application.company.command.CreateCompanyCommand;
import com.social.media.application.company.command.UpdateCompanyCommand;
import com.social.media.application.company.query.GetCompanyByIdQuery;
import com.social.media.application.company.dto.CompanyResponseDto;
import com.social.media.application.company.handler.*;
import com.social.media.domain.company.valueobject.CompanyId;
import org.springframework.stereotype.Service;

import java.util.Optional;

/**
 * Application Service for Company operations
 * Orchestrates commands and queries using handlers
 */
@Service
public class CompanyApplicationService {
    
    private final CreateCompanyCommandHandler createCompanyCommandHandler;
    private final UpdateCompanyCommandHandler updateCompanyCommandHandler;
    private final GetCompanyByIdQueryHandler getCompanyByIdQueryHandler;
    
    public CompanyApplicationService(
            CreateCompanyCommandHandler createCompanyCommandHandler,
            UpdateCompanyCommandHandler updateCompanyCommandHandler,
            GetCompanyByIdQueryHandler getCompanyByIdQueryHandler) {
        this.createCompanyCommandHandler = createCompanyCommandHandler;
        this.updateCompanyCommandHandler = updateCompanyCommandHandler;
        this.getCompanyByIdQueryHandler = getCompanyByIdQueryHandler;
    }
    
    // Command operations
    public CompanyResponseDto createCompany(CreateCompanyCommand command) {
        return createCompanyCommandHandler.handle(command);
    }
    
    public CompanyResponseDto updateCompany(UpdateCompanyCommand command) {
        return updateCompanyCommandHandler.handle(command);
    }
    
    // Query operations
    public Optional<CompanyResponseDto> getCompanyById(CompanyId companyId) {
        return getCompanyByIdQueryHandler.handle(new GetCompanyByIdQuery(companyId));
    }
}

