import { exec } from "../ssh";
import type { DeployStrategy } from "./types";

// Manual: AM không can thiệp lifecycle. Chỉ probe version và tail log file (nếu user chỉ ra ref = path file log).

export const manualStrategy: DeployStrategy = {
  async status({ hostId, versionProbe }) {
    const v = await exec(hostId, versionProbe);
    return {
      ok: true,
      log: `deploy method: manual (AM không tự kiểm tra trạng thái)\nversion (best-effort): ${v.stdout.trim() || "-"}`,
      version: v.stdout.trim() || undefined,
      running: false,
    };
  },

  async start() {
    return { ok: false, log: "Manual deploy — không hỗ trợ start tự động. Khởi chạy thủ công trên host." };
  },

  async stop() {
    return { ok: false, log: "Manual deploy — không hỗ trợ stop tự động." };
  },

  async restart() {
    return { ok: false, log: "Manual deploy — không hỗ trợ restart tự động." };
  },

  async logs({ hostId, ref }, lines = 200) {
    if (!ref) {
      return { ok: false, log: "Manual deploy — đặt deployRef = đường dẫn log file để AM đọc tail." };
    }
    const r = await exec(hostId, `tail -n ${lines} ${ref} 2>&1`, { timeoutMs: 15_000 });
    return { ok: r.ok, log: r.stdout || r.stderr };
  },

  async uninstall() {
    return { ok: false, log: "Manual deploy — gỡ thủ công trên host (rồi xoá row khai báo trong AM)." };
  },
};
