local M = {}

M.runCode = function()
  local curBuff = vim.api.nvim_get_current_buf()

  local stats = vim.api.nvim_list_uis()[1]

  local width = stats.width
  local height = stats.height

  local bufh = vim.api.nvim_create_buf(false, true)
  local winId = vim.api.nvim_open_win(bufh, true, {
    relative = "editor",
    width = width * 0.75,
    height = height * 0.75,
    col = 2,
    row = 2,
    style = "minimal",
    border = "rounded",
  })

  -- get the start and end lines of selection
  local startLine = vim.api.nvim_buf_get_mark(curBuff, "<")[1] - 1
  local endLine = vim.api.nvim_buf_get_mark(curBuff, ">")[1]
  -- print("range: ", startLine, endLine)

  local code = vim.api.nvim_buf_get_lines(curBuff, startLine, endLine, false)

  -- print (vim.inspect(code))

  local codeText = vim.fn.shellescape(table.concat(code, " "))
  -- print(codeText)

  local result = vim.fn.systemlist("php artisan tinker --execute=" .. codeText)

  vim.api.nvim_buf_set_text(bufh, 0, 0, 0, 0, result)
end

M.backTerminal = function()
  local bufh = vim.api.nvim_create_buf(false, true)
  local term = vim.api.nvim_open_term(bufh, {})

  local winId = vim.api.nvim_open_win(bufh, true, {
    relative = "editor",
    width = 80,
    height = 80,
    col = 2,
    row = 2,
    style = "minimal",
    border = "rounded",
  })

  local jobId = vim.fn.jobstart("php artisan tinker", {
    on_stdout = function(err, data)
      print(err, vim.inspect(data))
      vim.api.nvim_chan_send(term, table.concat(data, "\n"))
    end,
  })

  vim.api.nvim_chan_send(jobId, "$ub = UploadBatch::find(1);\n")
  vim.api.nvim_chan_send(jobId, "dump($ub);\n")
end

return M
