// 스마트공장 활용 로그 전송 유틸리티
// https://log.smart-factory.kr 에 사용자 접속 로그를 전송

import axios from "axios";
import { logger } from "./logger";

const SMART_FACTORY_LOG_URL =
  "https://log.smart-factory.kr/apisvc/sendLogDataJSON.do";

/**
 * 스마트공장 활용 로그 전송
 * 로그인 성공 시 비동기로 호출하여 응답을 블로킹하지 않음
 */
export async function sendSmartFactoryLog(params: {
  userId: string;
  remoteAddr: string;
  useType?: string;
}): Promise<void> {
  const apiKey = process.env.SMART_FACTORY_API_KEY;

  if (!apiKey) {
    logger.warn(
      "SMART_FACTORY_API_KEY 환경변수가 설정되지 않아 스마트공장 로그 전송을 건너뜁니다."
    );
    return;
  }

  try {
    const now = new Date();
    const logDt = formatDateTime(now);

    const logData = {
      crtfcKey: apiKey,
      logDt,
      useSe: params.useType || "접속",
      sysUser: params.userId,
      conectIp: params.remoteAddr,
      dataUsgqty: "",
    };

    const encodedLogData = encodeURIComponent(JSON.stringify(logData));

    const response = await axios.get(SMART_FACTORY_LOG_URL, {
      params: { logData: encodedLogData },
      timeout: 5000,
    });

    logger.info("스마트공장 로그 전송 완료", {
      userId: params.userId,
      status: response.status,
    });
  } catch (error) {
    // 스마트공장 로그 전송 실패해도 로그인에 영향 없도록 에러만 기록
    logger.error("스마트공장 로그 전송 실패", {
      userId: params.userId,
      error: error instanceof Error ? error.message : error,
    });
  }
}

/** yyyy-MM-dd HH:mm:ss.SSS 형식 */
function formatDateTime(date: Date): string {
  const y = date.getFullYear();
  const M = String(date.getMonth() + 1).padStart(2, "0");
  const d = String(date.getDate()).padStart(2, "0");
  const H = String(date.getHours()).padStart(2, "0");
  const m = String(date.getMinutes()).padStart(2, "0");
  const s = String(date.getSeconds()).padStart(2, "0");
  const ms = String(date.getMilliseconds()).padStart(3, "0");
  return `${y}-${M}-${d} ${H}:${m}:${s}.${ms}`;
}
