package com.loremind.infrastructure.web.mapper;

import com.loremind.domain.lorecontext.Page;
import com.loremind.infrastructure.web.dto.lorecontext.PageDTO;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * Mapper pour convertir entre Page (entité de domaine) et PageDTO.
 */
@Component
public class PageMapper {

    public PageDTO toDTO(Page page) {
        if (page == null) {
            return null;
        }
        PageDTO dto = new PageDTO();
        dto.setId(page.getId());
        dto.setLoreId(page.getLoreId());
        dto.setNodeId(page.getNodeId());
        dto.setTemplateId(page.getTemplateId());
        dto.setTitle(page.getTitle());
        dto.setValues(page.getValues() != null ? new HashMap<>(page.getValues()) : new HashMap<>());
        dto.setNotes(page.getNotes());
        dto.setTags(page.getTags() != null ? new ArrayList<>(page.getTags()) : new ArrayList<>());
        dto.setRelatedPageIds(page.getRelatedPageIds() != null ? new ArrayList<>(page.getRelatedPageIds()) : new ArrayList<>());
        return dto;
    }

    public Page toDomain(PageDTO dto) {
        if (dto == null) {
            return null;
        }
        return Page.builder()
                .id(dto.getId())
                .loreId(dto.getLoreId())
                .nodeId(dto.getNodeId())
                .templateId(dto.getTemplateId())
                .title(dto.getTitle())
                .values(dto.getValues() != null ? new HashMap<>(dto.getValues()) : new HashMap<>())
                .notes(dto.getNotes())
                .tags(dto.getTags() != null ? new ArrayList<>(dto.getTags()) : new ArrayList<>())
                .relatedPageIds(dto.getRelatedPageIds() != null ? new ArrayList<>(dto.getRelatedPageIds()) : new ArrayList<>())
                .build();
    }
}
