const mineflayer = require('mineflayer')
const express = require('express')

// ----------------- Render uyumlu HTTP server -----------------
const app = express()
const port = process.env.PORT || 3000

app.get('/', (req, res) => {
  res.send("AFK Bot çalışıyor!")
})

app.listen(port, () => {
  console.log(`HTTP server running on port ${port}`)
})

// ----------------- Mineflayer bot -----------------
function startBot() {

  const bot = mineflayer.createBot({
    host: 'oneblockado.aternos.me',
    port: 42233,
    username: 'AFKBot',
    version: '1.21.1'
  })

  let walking = true
  let lastPos = null
  let stuckCounter = 0

  bot.on('spawn', () => {
    console.log("Bot sunucuya girdi!")

    // ----------------- Hareket ve rastgele eylemler -----------------
    setInterval(mainMovement, 7000)
    setInterval(randomJump, 5000)
    setInterval(randomLook, 4000)
    setInterval(randomAction, 20000)
    setInterval(stuckCheck, 8000)

    // ----------------- Yeni item kontrolü -----------------
    let lastItemCount = bot.inventory.items().length

    setInterval(() => {
      const currentItemCount = bot.inventory.items().length
      if (currentItemCount > lastItemCount && Math.random() < 0.5) {
        bot.chat("oo bu da neymiş böyle")
      }
      lastItemCount = currentItemCount
    }, 10000)
  })

  // ----------------- Hareket sistemi -----------------
  function mainMovement() {
    if (!walking) return

    bot.clearControlStates()

    const actions = ['forward', 'back', 'left', 'right']
    const action = actions[Math.floor(Math.random() * actions.length)]

    bot.setControlState(action, true)

    setTimeout(() => {
      bot.setControlState(action, false)
    }, 3000)
  }

  function randomJump() {
    bot.setControlState('jump', true)
    setTimeout(() => bot.setControlState('jump', false), 400)
  }

  function randomLook() {
    const yaw = Math.random() * Math.PI * 2
    const pitch = (Math.random() - 0.5) * 0.7
    bot.look(yaw, pitch, true)
  }

  function randomAction() {
    const actions = ['slot', 'chat', 'swing']
    const choice = actions[Math.floor(Math.random() * actions.length)]

    if (choice === "slot") {
      const slot = Math.floor(Math.random() * 9)
      bot.setQuickBarSlot(slot)
    }

    if (choice === "chat") {
      const msgs = ['hmm','acaba ne yapsam','neden kucuk bir adadayiz ki','selam','çok sıkıldım','ooo','super','siz yokken burayi havaya ucuracagim']
      const msg = msgs[Math.floor(Math.random() * msgs.length)]
      bot.chat(msg)
    }

    if (choice === "swing") {
      bot.swingArm()
    }
  }

  // ----------------- Takılma kontrolü -----------------
  function stuckCheck() {
    if (!lastPos) {
      lastPos = bot.entity.position.clone()
      return
    }

    const pos = bot.entity.position
    const dx = pos.x - lastPos.x
    const dz = pos.z - lastPos.z
    const dist = Math.sqrt(dx*dx + dz*dz)

    if (dist < 0.25) {
      stuckCounter++
      console.log("Bot takılmış olabilir, kontrol " + stuckCounter)

      bot.clearControlStates()
      bot.setControlState('jump', true)
      bot.setControlState('back', true)

      setTimeout(() => {
        bot.clearControlStates()
      }, 2000)

      if (stuckCounter >= 3) {
        console.log("Bot yön değiştiriyor")
        const actions = ['forward', 'left', 'right']
        const action = actions[Math.floor(Math.random() * actions.length)]
        bot.setControlState(action, true)
        setTimeout(() => bot.setControlState(action, false), 3000)
        stuckCounter = 0
      }

    } else {
      stuckCounter = 0
    }

    lastPos = pos.clone()
  }

  // ----------------- Chat komutları -----------------
  bot.on('chat', (username, message) => {
    if (username === bot.username) return

    if (message === "!stop") {
      walking = false
      bot.clearControlStates()
      bot.setControlState('forward', false)
      bot.setControlState('back', false)
      bot.setControlState('left', false)
      bot.setControlState('right', false)
      bot.chat("Yürümeyi durdurdum!")
    }

    if (message === "!start") {
      walking = true
      bot.chat("Yürümeye tekrar başladım!")
    }

    if (message === "!drop") {
      const items = bot.inventory.items()
      if (items.length === 0) {
        bot.chat("Envanter boş")
        return
      }
      bot.chat("Envanteri boşaltıyorum...")
      for (const item of items) {
        bot.tossStack(item)
      }
    }
  })

  // ----------------- Ölüm kontrolü -----------------
  bot.on('death', () => {
    if (bot.entity.position.y < 10 && Math.random() < 0.5) {
      bot.chat("boşluğa bi gün atlamayı keseceğim")
    }
  })

  bot.on('end', () => {
    console.log("Bot düştü, tekrar bağlanıyor...")
    setTimeout(startBot, 5000)
  })

  bot.on('error', err => {
    console.log("Hata:", err)
  })
}

startBot()
