import axios from 'axios';
import type { QueueItem } from '@/types/QueueItem';

const makeQueue = async (): Promise<QueueItem[] | undefined> => {
  try {
    // เรียก API
    const response = await axios.post('http://127.0.0.1:9000/run-simulation');
    console.log('📌 Response:', response);

    const queueData = response.data.production_log;
    console.log('this is queueData queueservice', queueData);

    if (!Array.isArray(queueData)) {
      console.error('❌ Error: Invalid queue data format');
      return undefined;
    }

    // ✅ แปลงข้อมูลเป็น JSON String แล้ว Parse กลับมาเป็น Object ใหม่
    const queueItems: QueueItem[] = JSON.parse(
      JSON.stringify(queueData.map(q => ({
        queueID: q.queueID,
        machineID: q.machineID,
        orderID: q.orderID,
        pageNumber: q.pageNumber ?? 1, // ถ้าไม่มี ให้ใช้ค่า default เป็น 1
        startTime: q.startTime,
        finishTime: q.finishTime,
        status: q.status,
        bottleSize: q.bottleSize,
        producedQuantity: q.producedQuantity,
      })))
    );

    return queueItems; // ✅ คืนค่าเป็น `QueueItem[]`
  } catch (error: any) {
    console.error('❌ Error:', error.message || error);
    return undefined;
  }
};

export default { makeQueue };



export class QueueService {
  private queue: Queue[] = [];

  // ดึงรายการคิวทั้งหมด
  getQueue(): Queue[] {
    return this.queue;
  }

  // ค้นหารายการคิวโดยใช้ queueID
  getQueueById(queueID: number): Queue | undefined {
    return this.queue.find(item => item.queueID === queueID);
  }

  // เพิ่มรายการใหม่เข้า queue
  addQueueItem(item: Queue): void {
    this.queue.push(item);
  }

  // อัปเดตรายการ queue ที่มีอยู่
  updateQueueItem(updatedItem: Queue): void {
    const index = this.queue.findIndex(item => item.queueID === updatedItem.queueID);
    if (index !== -1) {
      this.queue[index] = updatedItem;
    }
  }

  // ลบรายการ queue ตาม queueID
  removeQueueItem(queueID: number): void {
    this.queue = this.queue.filter(item => item.queueID !== queueID);
  }

  // เปลี่ยนสถานะของคิว
  updateQueueStatus(queueID: number, status: 'pending' | 'in-progress' | 'completed' | 'canceled'): void {
    const queueItem = this.getQueueById(queueID);
    if (queueItem) {
      queueItem.status = status;
    }
  }

  // คำนวณเวลาการทำงานของ queue
  calculateProductionTime(queueID: number): number | null {
    const queueItem = this.getQueueById(queueID);
    if (queueItem && queueItem.startTime && queueItem.finishTime) {
      return (queueItem.finishTime.getTime() - queueItem.startTime.getTime()) / (1000 * 60); // แปลงเป็นนาที
    }
    return null;
  }

}