// 자동 배포 webhook — Gitea Actions 가 시크릿 없이 호출
// 보안: X-Deploy-Token 헤더 일치 필수 (.env 또는 하드코딩 토큰)
// 동작: 백그라운드로 git pull + docker compose up --build 실행
// 전제: 컨테이너에 /var/run/docker.sock 마운트 + 소스 디렉토리 마운트 필요
import { NextRequest, NextResponse } from "next/server";
import { spawn } from "node:child_process";
import { writeFile, mkdir } from "node:fs/promises";
import path from "node:path";

const DEPLOY_TOKEN = process.env.DEPLOY_WEBHOOK_TOKEN || "momo-deploy-2026-secure";
const DEPLOY_SCRIPT = process.env.DEPLOY_SCRIPT || "/deploy/deploy.sh";

export async function POST(req: NextRequest) {
  const token = req.headers.get("x-deploy-token") || req.headers.get("X-Deploy-Token");
  if (token !== DEPLOY_TOKEN) {
    return NextResponse.json({ success: false, message: "Unauthorized" }, { status: 401 });
  }

  const logPath = "/tmp/momo-deploy.log";
  try {
    await mkdir(path.dirname(logPath), { recursive: true });
    await writeFile(logPath, `[${new Date().toISOString()}] deploy 시작\n`);
  } catch { /* ignore */ }

  // 백그라운드 실행 — 응답은 즉시 반환
  const child = spawn("/bin/sh", ["-c",
    `(${DEPLOY_SCRIPT} 2>&1 || echo "[deploy.sh 실행 실패 — 호스트에 docker.sock + 스크립트 마운트 필요]") >> ${logPath}`
  ], { detached: true, stdio: "ignore" });
  child.unref();

  return NextResponse.json({
    success: true,
    message: "deploy 트리거됨 (백그라운드 실행)",
    logPath,
  });
}

// GET — 마지막 배포 로그 조회용 (디버깅)
export async function GET(req: NextRequest) {
  const token = req.headers.get("x-deploy-token") || new URL(req.url).searchParams.get("token");
  if (token !== DEPLOY_TOKEN) {
    return NextResponse.json({ success: false }, { status: 401 });
  }
  try {
    const fs = await import("node:fs/promises");
    const log = await fs.readFile("/tmp/momo-deploy.log", "utf-8");
    return new NextResponse(log, { headers: { "Content-Type": "text/plain; charset=utf-8" } });
  } catch (err) {
    const msg = err instanceof Error ? err.message : String(err);
    return NextResponse.json({ log: "(로그 없음)", error: msg });
  }
}
