package com.social.media.interfaces.web.mapper;

import com.social.media.application.user.command.CreateUserCommand;
import com.social.media.application.user.command.UpdateUserCommand;
import com.social.media.domain.company.valueobject.CompanyId;
import com.social.media.domain.user.aggregate.User;
import com.social.media.domain.user.valueobject.UserId;
import com.social.media.domain.shared.enums.UserType;
import com.social.media.domain.shared.enums.UserStatus;
import com.social.media.interfaces.web.dto.user.CreateUserRequest;
import com.social.media.interfaces.web.dto.user.UpdateUserRequest;
import com.social.media.interfaces.web.dto.user.UserResponse;
import org.springframework.stereotype.Component;

/**
 * Mapper between User DTOs and domain/application objects
 */
@Component
public class UserDtoMapper {
    
    /**
     * Convert CreateUserRequest to CreateUserCommand
     */
    public CreateUserCommand toCreateCommand(CreateUserRequest request, UserId createdBy) {
        return new CreateUserCommand(
                request.name(),
                request.email(),
                request.password(),
                UserType.valueOf(request.userType()),
                request.companyId() != null ? new CompanyId(request.companyId()) : null,
                request.cpf(),
                request.phone(),
                null, // position
                null, // department
                false, // whatsappEnabled
                createdBy
        );
    }
    
    /**
     * Convert UpdateUserRequest to UpdateUserCommand
     */
    public UpdateUserCommand toUpdateCommand(UserId userId, UpdateUserRequest request, UserId updatedBy) {
        return new UpdateUserCommand(
                userId,
                request.name(),
                request.email(),
                request.phone(),
                null, // position
                null, // department
                request.status() != null ? UserStatus.valueOf(request.status()) : null,
                request.userType() != null ? UserType.valueOf(request.userType()) : null,
                null, // whatsappEnabled
                null, // avatarUrl
                updatedBy
        );
    }
    
    /**
     * Convert User aggregate to UserResponse
     */
    public UserResponse toResponse(User user) {
        return new UserResponse(
                user.getId().value().toString(),
                user.getCompanyId() != null ? user.getCompanyId().value().toString() : null,
                user.getName(),
                user.getEmail().value(),
                user.getCpf() != null ? user.getCpf().value() : null,
                user.getPhone() != null ? user.getPhone().value() : null,
                user.isWhatsappEnabled(),
                user.getAvatarUrl(),
                user.getPosition(),
                user.getDepartment(),
                user.getRegistrationDate(),
                user.getLastAccessDate(),
                user.getStatus().name(),
                user.getType().name(),
                user.isEmailVerified(),
                user.getParentUserId() != null ? user.getParentUserId().value().toString() : null,
                user.isDeleted(),
                user.getCreatedAt(),
                user.getUpdatedAt()
        );
    }
}
