import * as cs from "code-server"
import * as fspath from "path"

export const plugin: cs.Plugin = {
  displayName: "Test Plugin",
  routerPath: "/test-plugin",
  homepageURL: "https://example.com",
  description: "Plugin used in code-server tests.",

  init(config) {
    config.logger.debug("test-plugin loaded!")
  },

  router() {
    const r = cs.express.Router()
    r.get("/test-app", (_, res) => {
      res.sendFile(fspath.resolve(__dirname, "../public/index.html"))
    })
    r.get("/goland/icon.svg", (_, res) => {
      res.sendFile(fspath.resolve(__dirname, "../public/icon.svg"))
    })
    r.get("/error", () => {
      throw new cs.HttpError("error", cs.HttpCode.LargePayload)
    })
    return r
  },

  wsRouter() {
    const wr = cs.WsRouter()
    wr.ws("/test-app", (req) => {
      cs.wss.handleUpgrade(req, req.ws, req.head, (ws) => {
        req.ws.resume()
        ws.send("hello")
      })
    })
    return wr
  },

  applications() {
    return [
      {
        name: "Test App",
        version: "4.0.0",
        iconPath: "/icon.svg",
        path: "/test-app",

        description: "This app does XYZ.",
        homepageURL: "https://example.com",
      },
    ]
  },
}
