import express from 'express'
import cors from 'cors'
import dotenv from 'dotenv'
import { createServer } from 'http' // ✅ เพิ่ม
import { Server } from 'socket.io'  // ✅ เพิ่ม
import router from './routes/route.js'
import { globalResponseHandler } from './middlewares/responseHandler.js'
import { SocketManager } from './socket/socketManager.js' // ✅ เพิ่ม Class ที่เราจะสร้าง

dotenv.config()

const app = express()
app.use(cors())
app.use(express.json({ limit: '10mb' }))

app.use(globalResponseHandler);

app.use((err, req, res, next) => {
  if (err instanceof SyntaxError && err.status === 400 && 'body' in err) {
    console.error('🟥 Invalid JSON Received:', err.message)
    return res.status(400).json({
      code: "400",
      message: "Invalid JSON format",
      message_th: "โครงสร้าง JSON ไม่ถูกต้อง",
      data: []
    })
  }
  next()
})

app.use('/api/ttc', router)

// ✅ เปลี่ยนการ Listen เป็น HTTP Server + Socket
const httpServer = createServer(app)
const io = new Server(httpServer, {
  cors: {
    origin: "*", // ปรับตามความเหมาะสม
    methods: ["GET", "POST"]
  }
})

// ✅ เรียกใช้ Socket Manager ตาม Pattern
const socketManager = new SocketManager(io)
socketManager.initialize()

const PORT = process.env.PORT || 3000
httpServer.listen(PORT, () => {
  console.log(`✅ ${process.env.PJ_NAME} running on port ${PORT} with WebSocket`)
})