-- See README for usage info
function placeBreeder()
  print('Initializing breeder...')
  breeder = peripheral.wrap('top')
  -- Why are we discarding slot 2?
  -- Because, by design, it MUST be
  -- the trash chicken from the last
  -- generation.
  breeder.pushItems('bottom', 2)
  for i = 1, 16, 1 do
    turtle.select(i)
    turtle.suckUp()
  end
  turtle.digUp()
  selectItem('chickens:breeder')
  turtle.placeUp()
  selectItem('minecraft:wheat_seeds')
  turtle.dropUp()
  pushBestChickens()
end

function selectItem(name)
  for i = 1, 16, 1 do
    if turtle.getItemDetail(i) then
      if turtle.getItemDetail(i).name == name then
        turtle.select(i)
        return i
      end
    end
  end
end

function pushBestChickens()
  print('Selecting best chickens...')
  chickens = 0
  index = nil
  for i = 16, 1, -1 do
    print('Checking index ' .. i)
    item = turtle.getItemDetail(i)
    if item then
      turtle.select(i)
      if not i == 1 then
        print('Discarding twin from breeding pair')
        turtle.dropDown(item.count - 1)
      end
      if item.name == 'chickens:chicken_item' then
        if item.count >= 16 then error('Done!') end
        for i = 1, item.count, 1 do
          if chickens == 0 then
            print('Inserting first chicken')
            turtle.dropUp(1)
            chickens = chickens + 1
          elseif chickens == 1 then
            print('Inserting second chicken')
            buffer = peripheral.wrap('front')
            turtle.drop(1)
            buffer.pushItems('top', 1, 16, 2)
            chickens = chickens + 1
          else
            print('Discarding chicken')
            turtle.dropDown()
          end
        end
      end
    end
  end
end

function checkIfDone()
  output = peripheral.wrap('bottom')
  for i = 1, output.size(), 1 do
    if output.getItemDetail(i) then
      item = output.getItemDetail(i)
      if item.count == item.maxCount then
        return true
      end
    end
  end
  return false
end

local function main()
  print('Initializing...')
  while not checkIfDone() do
    print('Iterating...')
    placeBreeder()  
    sleep()
    while peripheral.wrap('top').getItemDetail(4) == nil do sleep() end
  end
  print('Breeding complete')
end

main()