package com.kamco.cd.kamcoback.zoo.service;

import com.kamco.cd.kamcoback.postgres.core.ZooCoreService;
import com.kamco.cd.kamcoback.zoo.dto.ZooDto;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@RequiredArgsConstructor
@Service
@Transactional(readOnly = true)
public class ZooService {

  private final ZooCoreService zooCoreService;

  // 동물원의 UUID로 id조회
  public Long getZooByUuid(String uuid) {
    return zooCoreService.getDataByUuid(uuid).getId();
  }

  /**
   * 동물원 생성
   *
   * @param req 동물원 생성 요청
   * @return 생성된 동물원 정보 (동물 개수 포함)
   */
  @Transactional
  public ZooDto.Detail createZoo(ZooDto.AddReq req) {
    return zooCoreService.create(req);
  }

  /**
   * 동물원 삭제 (논리 삭제)
   *
   * @param id 동물원 ID
   */
  @Transactional
  public void deleteZoo(Long id) {
    zooCoreService.remove(id);
  }

  /**
   * 동물원 단건 조회
   *
   * @param id 동물원 ID
   * @return 동물원 정보 (동물 개수 포함)
   */
  public ZooDto.Detail getZoo(Long id) {
    return zooCoreService.getOneById(id);
  }

  /**
   * 동물원 검색 (페이징)
   *
   * @param searchReq 검색 조건
   * @return 페이징 처리된 동물원 목록 (각 동물원의 동물 개수 포함)
   */
  public Page<ZooDto.Detail> search(ZooDto.SearchReq searchReq) {
    return zooCoreService.search(searchReq);
  }
}
