package com.codenetworkz.blog.mappers;


import com.codenetworkz.blog.dtos.CategoryDto;
import com.codenetworkz.blog.dtos.TagDto;
import com.codenetworkz.blog.models.Category;
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 CategoryMapper {

      public Optional<CategoryDto> categoryToCategaryDto(Optional<Category> category){
          CategoryDto categoryDto = new CategoryDto();
          if(category.isPresent()) {
              categoryDto.setCategoryId(category.get().getId());
              categoryDto.setName(category.get().getName());
              categoryDto.setDesc(category.get().getDescription());
              categoryDto.setSlug(category.get().getSlug());
              categoryDto.setCreatedAt(convertToLocalDate(category.get().getCreateAt()));
              categoryDto.setActiveStatus(category.get().getIsActive());
              categoryDto.setAdminStatus(category.get().getIsApproved());
          }
          return Optional.of(categoryDto);
        }

        public Optional<Category> categoryDtoToCategory(CategoryDto categoryDto){
            Category category=new Category();
            if(categoryDto!=null) {
                category.setId(categoryDto.getCategoryId());
                category.setName(categoryDto.getName());
                category.setDescription(categoryDto.getDesc());
                category.setSlug(categoryDto.getSlug());
                category.setCreateAt(convertToLocalDateTime(categoryDto.getCreatedAt()));
                category.setIsActive(categoryDto.getActiveStatus());
                category.setIsApproved(categoryDto.getAdminStatus());
            }
            return Optional.of(category);
        }

        public List<CategoryDto> categoryToCategaryDtoList(List<Category> categories){
            List<CategoryDto> categoryDtos =new ArrayList<>();
            if(!categories.isEmpty()) {
                categoryDtos = categories.stream().map(category -> categoryToCategaryDto(Optional.ofNullable(category)).get()).toList();
            }
            return categoryDtos;
        }

        public List<Category> categoryListDtoToCategoryList(List<CategoryDto> categoryDtoList){
            List<Category> categories =new ArrayList<>();
            if(!categoryDtoList.isEmpty()) {
                categories = categoryDtoList.stream().map(category -> categoryDtoToCategory(category).get()).toList();
            }
            return categories;
        }
}
