--[[
    Handle the randomly generated Empire cargo missions.
--]]

lang = lephisto.lang()
if lang == "es" then
  -- Not translated atm.
else -- Default english.
  misn_desc     = "The Empire needs to ship %d tons of %s to %s in the %s system by %s (%s left)."
  misn_reward   = "%d credits"
  title = {}
  title[1]      = "ES: Ship to %s"
  title[2]      = "ES: Delivery to %s"
  full_title    = "Ship is full"
  full_msg      = "Your ship is too full.  You need to make room for %d more tons if you want to be able to accept the mission."
  accept_title  = "Mission Accepted"
  accept_msg    = "The Empire workers load the %d tons of %s onto your ship."
  toomany_title = "Too many missions"
  toomany_msg   = "You have too many active missions."
  finish_title  = "Succesful Delivery"
  finish_msg    = "The Empire workers unload the %s at the docks."
  miss_title    = "Cargo Missing"
  miss_msg      = "You are missing the %d tons of %s!."
  miss_timeup   = "MISSION FAILED: You have failed to deliver the goods to the Empire on time!"
end

--    Empire shipping missions are always timed, but quite lax on the schedules.
--    Pays a bit more then the rush missions.

-- Create the mission.
function create()
   -- Target destination.
  local i = 0
  local landed = space.getPlanet()
  repeat
    planet, system = space.getPlanet(misn.factions())
    i = i + 1
  until planet ~= landed or i > 10
  -- Infinite loop protection.
  if i > 10 then
    misn.finish(false)
  end
  misn.setMarker(system) -- Set system marker.
  misn_dist = system:jumpDist()

  -- Mission generics.
  misn_type = "Cargo"
  i = rnd.int(1)
  misn.setTitle(string.format(title[i+1], planet:name()))

  -- More mission specifics.
  carg_mass = rnd.int(10, 30)
  i = rnd.int(12)
  if i < 5 then
    carg_type = "Food"
  elseif i < 8 then
    carg_type = "Ore"
  elseif i < 10 then
    carg_type = "Industrial Goods"
  elseif i < 12 then
    carg_type = "Luxury Goods"
  else
    carg_type = "Medicine"
  end

  misn_time = time.get() + time.units(5) +
      rnd.int(time.units(5), time.units(8)) * misn_dist
  misn.setDesc(string.format( misn_desc, carg_mass, carg_type,
      planet:name(), system:name(),
      time.str(misn_time), time.str(misn_time-time.get())))
  reward = misn_dist * carg_mass * (500+rnd.int(250)) +
      carg_mass * (250+rnd.int(150)) +
      rnd.int(2500)
  misn.setReward(string.format( misn_reward, reward))
end

-- Mission is accepted.
function accept()
  if player.freeCargo() < carg_mass then
    tk.msg(full_title, string.format(full_msg, carg_mass-player.freeCargo()))
    misn.finish()
  elseif misn.accept() then -- Able to accept the mission, hooks BREAK after accepting.
    carg_id = player.addCargo(carg_type, carg_mass)
    tk.msg(accept_title, string.format( accept_msg, carg_mass, carg_type))
    hook.land("land") -- Only hook after accepting.
    hook.time("timeup")
  else
    tk.msg(toomany_title, toomany_msg)
    misn.finish()
  end
end

-- Land hook.
function land()
  local landed = space.getPlanet()
  if landed == planet then
    if player.rmCargo(carg_id) then
      player.pay(reward)
      tk.msg(finish_title, string.format(finish_msg, carg_type))

      -- Increase empire shipping mission counter.
      n = var.peek("es_misn")
      if n ~= nil then
        var.push("es_misn", n+1)
      else
        var.push("es_misn", 1)
      end

      -- Increase faction.
      if player.getFaction("Empire") < 50 then
        player.modFaction("Empire", rnd.int(5))
      end

      misn.finish(true)
    else
      tk.msg(miss_title, string.format( miss_msg, carg_mass, carg_type))
    end
  end
end

-- Time hook.
function timeup()
  if time.get() > misn_time then
    player.msg(miss_timeup)
    misn.finish(false)
  end
  misn.setDesc(string.format( misn_desc, carg_mass, carg_type,
      planet:name(), system:name(),
      time.str(misn_time), time.str(misn_time-time.get())))
end

