-- vi: ft=lua
-- Goal: collect lava using buckets in the nether, deposit the buckets into a fluid transposer that extracts the lava and sends it to a power generator
--
-- chest above base needs to contain empty buckets
-- the filled buckets will be deposited in a chest below the base

local function compareItemName(target)
    local itemDetail = turtle.getItemDetail()
    if itemDetail == nil then
        return nil
    end
    return itemDetail.name == target
end

local function findFirstItem(target)
    for i=1,16 do
        turtle.select(i)
        if compareItemName(target) then
            print('Found an target item (' .. target .. ') in slot ' .. i)
            return i
        end
    end
    return nil
end

local function findFirstEmptyBucket()
    return findFirstItem("minecraft:bucket")
end

local function findFirstLavaBucket()
    return findFirstItem("minecraft:lava_bucket")
end

local function returnToBase()
    print('returing to base')
    while ForwardCounter > 0 do
        turtle.back()
        ForwardCounter = ForwardCounter - 1
    end
end

local function despositRefill()
    for i = 1, 16 do
        turtle.select(i)
        if compareItemName("minecraft:lava_bucket") then
            turtle.dropDown()
        end
        if compareItemName("minecraft:bucket") then
            turtle.dropUp()
        end
    end

    turtle.suckUp(16)
end

local function refuel()
    local lava_bucket = findFirstLavaBucket()
    if lava_bucket == nil then
        return false
    end

    turtle.select(lava_bucket)
    turtle.refuel()
    return true
end


ForwardCounter = 0

despositRefill()
while true do
    if turtle.getFuelLevel() < ForwardCounter then
        print('not enough fuel to return. trying to refuel')
        if not refuel() then
            print('refulling failed. probably the end of the lava lake. returning to base')
            returnToBase()
            break
        end
    end

    if findFirstEmptyBucket() == nil then
        print('could not find any empty buckets. returning and refilling')
        returnToBase()
        despositRefill()

    else
        -- try to fill it
        turtle.placeDown()
        if compareItemName("minecraft:bucket") then
            if turtle.forward() then
                ForwardCounter = ForwardCounter + 1
            else
                returnToBase()
            end
        end
    end
end