package com.prudas.app.service;

import com.prudas.app.dto.TeamMemberRequest;
import com.prudas.app.dto.TeamMemberResponse;
import com.prudas.app.entity.TeamMember;
import com.prudas.app.exception.ResourceNotFoundException;
import com.prudas.app.repository.TeamMemberRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

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

    private final TeamMemberRepository repository;

    public List<TeamMemberResponse> findAll() {
        return repository.findAllByOrderByDisplayOrderAsc().stream().map(this::toResponse).toList();
    }

    @Transactional
    public TeamMemberResponse create(TeamMemberRequest request) {
        TeamMember entity = TeamMember.builder()
                .name(request.name()).title(request.title())
                .photoUrl(request.photoUrl()).linkedinUrl(request.linkedinUrl())
                .displayOrder(request.displayOrder())
                .build();
        return toResponse(repository.save(entity));
    }

    @Transactional
    public TeamMemberResponse update(Long id, TeamMemberRequest request) {
        TeamMember entity = repository.findById(id)
                .orElseThrow(() -> new ResourceNotFoundException("Team member not found: " + id));
        entity.setName(request.name());
        entity.setTitle(request.title());
        entity.setPhotoUrl(request.photoUrl());
        entity.setLinkedinUrl(request.linkedinUrl());
        entity.setDisplayOrder(request.displayOrder());
        return toResponse(repository.save(entity));
    }

    @Transactional
    public void delete(Long id) {
        if (!repository.existsById(id)) {
            throw new ResourceNotFoundException("Team member not found: " + id);
        }
        repository.deleteById(id);
    }

    private TeamMemberResponse toResponse(TeamMember e) {
        return new TeamMemberResponse(e.getId(), e.getName(), e.getTitle(), e.getPhotoUrl(), e.getLinkedinUrl(), e.getDisplayOrder());
    }
}
