package dev.sonpx.loyalty.mcp.service;

import dev.sonpx.loyalty.mcp.model.Result;
import dev.sonpx.loyalty.mcp.reward.client.TransactionCodeClient;
import dev.sonpx.loyalty.mcp.reward.model.TransactionCode;
import java.util.Arrays;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Service
@Slf4j
@RequiredArgsConstructor
public class TransactionCodeService {

    private final TransactionCodeClient transactionCodeClient;

    public Result<TransactionCode> findByCode(String code) {
        TransactionCode txn = transactionCodeClient.findByCode(code);
        return Result.of(txn, """
                Trả lời tự nhiên bằng tiếng Việt. Trình bày chi tiết thông tin Transaction Code:
                - Tên Giao dịch, Mã Giao dịch, Nhóm/Loại.
                - Loại tiền tệ, Cấu hình khác nếu có.
                Dùng bullet list dễ đọc.
                """);
    }

    public Result<List<TransactionCode>> findByCodes(String codes) {
        List<String> codeList = Arrays.asList(codes.split(",\\s*"));
        List<TransactionCode> txnList = transactionCodeClient.findByCodes(codeList);
        return Result.of(txnList, """
                Trả lời tự nhiên bằng tiếng Việt. Hiển thị danh sách các Transaction Code.
                Không dùng markdown table.
                """);
    }

    public Result<Boolean> exists(String code) {
        Boolean isExist = transactionCodeClient.exists(code);
        return Result.of(isExist, """
                Trả lời tự nhiên bằng tiếng Việt. Nếu exists=true thì báo mã giao dịch có tồn tại, nếu false thì không tồn tại.
                """);
    }
}
