package com.social.media.infrastructure.persistence.campaign;

import com.social.media.domain.campaign.aggregate.Campaign;
import com.social.media.domain.campaign.valueobject.*;
import com.social.media.domain.user.valueobject.UserId;
import com.social.media.domain.socialaccount.valueobject.SocialAccountId;
import com.social.media.domain.bot.valueobject.BotId;
import org.springframework.stereotype.Component;

/**
 * Mapper between Campaign domain entity and JPA entity
 */
@Component
public class CampaignMapper {
    
    /**
     * Convert domain entity to JPA entity
     */
    public CampaignJpaEntity toJpaEntity(Campaign campaign) {
        CampaignJpaEntity entity = new CampaignJpaEntity();
        
        if (campaign.getId() != null) {
            entity.setId(campaign.getId().value());
        }
        
        entity.setName(campaign.getName());
        entity.setDescription(campaign.getDescription());
        entity.setUserId(campaign.getUserId().value());
        entity.setAccountNetworkId(campaign.getAccountNetworkId().value());
        entity.setBotId(campaign.getBotId().value());
        entity.setScriptId(campaign.getScriptId());
        entity.setListId(campaign.getListId());
        entity.setTypeInteration(campaign.getTypeInteration());
        entity.setStatusInteration(campaign.getStatusInteration());
        entity.setDateInteration(campaign.getDateInteration());
        entity.setHourInteration(campaign.getHourInteration());
        entity.setTextInteration(campaign.getTextInteration());
        entity.setDateStart(campaign.getDateStart());
        entity.setHourStart(campaign.getHourStart());
        entity.setDateEnd(campaign.getDateEnd());
        entity.setHourEnd(campaign.getHourEnd());
        entity.setCreatedAt(campaign.getCreatedAt());
        entity.setUpdatedAt(campaign.getUpdatedAt());
        entity.setVersion(campaign.getVersion());
        
        return entity;
    }
    
    /**
     * Convert JPA entity to domain entity
     */
    public Campaign toDomainEntity(CampaignJpaEntity entity) {
        return new Campaign(
            CampaignId.of(entity.getId()),
            entity.getName(),
            entity.getDescription(),
            UserId.of(entity.getUserId()),
            SocialAccountId.of(entity.getAccountNetworkId()),
            BotId.of(entity.getBotId()),
            entity.getScriptId(),
            entity.getListId(),
            entity.getTypeInteration(),
            entity.getStatusInteration(),
            entity.getDateInteration(),
            entity.getHourInteration(),
            entity.getTextInteration(),
            entity.getDateStart(),
            entity.getHourStart(),
            entity.getDateEnd(),
            entity.getHourEnd(),
            entity.getCreatedAt(),
            entity.getUpdatedAt(),
            entity.getVersion()
        );
    }
}
