package com.erp.service;

import com.erp.common.BaseService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
@Slf4j
public class SystemNoticeService extends BaseService {

    @Autowired
    private CommonService commonService;

    // ──────────────────────────────────────────────────
    // 공지사항 목록 조회
    // ──────────────────────────────────────────────────

    public List<Map<String, Object>> getSystemNoticeList(Map<String, Object> params) {
        // is_active → isActive 키 변환 (프론트엔드 snake_case 호환)
        Object isActiveRaw = params.remove("is_active");
        if (isActiveRaw == null) isActiveRaw = params.get("is_active");
        if (isActiveRaw instanceof String s && !s.isBlank()) {
            params.put("is_active", "true".equalsIgnoreCase(s) || "1".equals(s));
        } else {
            params.remove("is_active");
        }

        commonService.applyCompanyCodeFilter(params);
        return sqlSession.selectList("systemNotice.getSystemNoticeList", params);
    }

    // ──────────────────────────────────────────────────
    // 공지사항 등록
    // ──────────────────────────────────────────────────

    @Transactional
    public Map<String, Object> insertSystemNotice(Map<String, Object> params) {
        sqlSession.insert("systemNotice.insertSystemNotice", params);

        // useGeneratedKeys로 id가 params에 주입됨
        Object id = params.get("id");
        Map<String, Object> fetchParams = new HashMap<>();
        fetchParams.put("id", id);
        fetchParams.put("company_code", "*"); // 방금 생성한 row이므로 company_code 필터 없이 조회
        return sqlSession.selectOne("systemNotice.getSystemNoticeInfo", fetchParams);
    }

    // ──────────────────────────────────────────────────
    // 공지사항 수정
    // ──────────────────────────────────────────────────

    @Transactional
    public Map<String, Object> updateSystemNotice(Map<String, Object> params) {
        commonService.applyCompanyCodeFilter(params);
        int affected = sqlSession.update("systemNotice.updateSystemNotice", params);
        if (affected == 0) {
            throw new IllegalArgumentException("공지사항을 찾을 수 없거나 수정 권한이 없습니다.");
        }

        Object id = params.get("id");
        Map<String, Object> fetchParams = new HashMap<>();
        fetchParams.put("id", id);
        fetchParams.put("company_code", "*");
        return sqlSession.selectOne("systemNotice.getSystemNoticeInfo", fetchParams);
    }

    // ──────────────────────────────────────────────────
    // 공지사항 삭제
    // ──────────────────────────────────────────────────

    @Transactional
    public void deleteSystemNotice(Map<String, Object> params) {
        commonService.applyCompanyCodeFilter(params);
        int affected = sqlSession.delete("systemNotice.deleteSystemNotice", params);
        if (affected == 0) {
            throw new IllegalArgumentException("공지사항을 찾을 수 없거나 삭제 권한이 없습니다.");
        }
    }
}
