package com.codenetworkz.blog.mappers;



import com.codenetworkz.blog.dtos.TagDto;
import com.codenetworkz.blog.models.Tag;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import static com.codenetworkz.blog.mappers.DateConversion.convertToLocalDate;
import static com.codenetworkz.blog.mappers.DateConversion.convertToLocalDateTime;


@Component
public class TagMapper {

      public Optional<TagDto> tagToTagDto(Optional<Tag> tag){
          TagDto tagDto = new TagDto();
          if(tag.isPresent()) {
              tagDto.setTagId(tag.get().getId());
              tagDto.setName(tag.get().getName());
              tagDto.setDesc(tag.get().getDescription());
              tagDto.setSlug(tag.get().getSlug());
              tagDto.setCreatedAt(convertToLocalDate(tag.get().getCreateAt()));
              tagDto.setActiveStatus(tag.get().getIsActive());
              tagDto.setAdminStatus(tag.get().getIsApproved());
          }
          return Optional.of(tagDto);
        }

        public Optional<Tag> tagDtoToTag(TagDto tagDto){
            Tag tag=new Tag();
            if(tagDto!=null) {
                tag.setId(tagDto.getTagId());
                tag.setName(tagDto.getName());
                tag.setDescription(tagDto.getDesc());
                tag.setSlug(tagDto.getSlug());
                tag.setCreateAt(convertToLocalDateTime(tagDto.getCreatedAt()));
                tag.setIsActive(tagDto.getActiveStatus());
                tag.setIsApproved(tagDto.getAdminStatus());
            }
            return Optional.of(tag);
        }

        public List<TagDto> tagListToTagDtoList(List<Tag> tags){
            List<TagDto> tagDtos =new ArrayList<>();
            if(!tags.isEmpty()) {
                tagDtos = tags.stream().map(tag -> tagToTagDto(Optional.ofNullable(tag)).get()).toList();
            }
            return tagDtos;
        }

        public List<Tag> tagDtoListToTagList(List<TagDto> tagDtolist){
            List<Tag> tags =new ArrayList<>();
            if(!tagDtolist.isEmpty()) {
                tags = tagDtolist.stream().map(tagDto -> tagDtoToTag(tagDto).get()).toList();
            }
            return tags;
        }
}
