package kr.itn.itnhub.memo;

import kr.itn.itnhub.org.OrgNotFoundException;
import kr.itn.itnhub.org.OrganizationMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 기관관리 상세의 업무메모 탭이 쓰는 서비스. 전화 통화 등 담당자와의 연락 내용을
 * 기관별로 남겨두는 단순 CRUD이며, Mattermost와는 무관한 순수 DB 기능이다.
 */
@Service
public class WorkMemoService {

    private final WorkMemoMapper memoMapper;
    private final OrganizationMapper orgMapper;

    public WorkMemoService(WorkMemoMapper memoMapper, OrganizationMapper orgMapper) {
        this.memoMapper = memoMapper;
        this.orgMapper = orgMapper;
    }

    public List<WorkMemo> list(Long orgId) {
        requireOrg(orgId);
        return memoMapper.findByOrg(orgId);
    }

    @Transactional
    public WorkMemo create(Long orgId, MemoRequest request) {
        requireOrg(orgId);

        WorkMemo memo = new WorkMemo();
        memo.setOrgId(orgId);
        memo.setContactName(request.contactName());
        memo.setBody(request.body());
        memoMapper.insert(memo);

        // 방금 넣은 행이 created_at 기준 가장 최신이므로 목록의 첫 행이 곧 이 메모다.
        return memoMapper.findByOrg(orgId).get(0);
    }

    @Transactional
    public void delete(Long orgId, Long memoId) {
        requireOrg(orgId);

        int deleted = memoMapper.delete(orgId, memoId);
        if (deleted == 0) {
            throw new OrgNotFoundException("메모를 찾을 수 없습니다: " + memoId);
        }
    }

    private void requireOrg(Long orgId) {
        if (orgMapper.findById(orgId) == null) {
            throw new OrgNotFoundException("기관을 찾을 수 없습니다: " + orgId);
        }
    }
}
