// lot.h



#ifndef _LOT_H
#define _LOT_H

#include "product_hist.h"
#include "lot_machine.h"
#include "fpn_machine.h"
#include "ptr_and_len.h"
#include "machine.h"

typedef struct _lot lot;

struct _lot{	// total = 56 bytes
	// 全料號序列的位置idx
	unsigned int fpn_idx;	// 4 bytes
	
	/* 當前在等待或的機台s
	如果讀到正在上機, 那麼將會更新
	上機信息, 上機時間可能早於排配時間
	*/
	unsigned int curr_seq;	// 4 bytes
	
	// 最大次序 也就是fpn這個料號的長度
	unsigned int max_seq;	// 4 bytes
	
	// 工作數量
	unsigned int working_qty; // 4 bytes 用來計算耗時的, 因為有些機台pnl作業,有些機台Strip作業
	
	// 數量, 以pcs計
	unsigned int pcs;	// 4 bytes
	
	// 重要度
	unsigned int importance;	// 4 bytes
	
	// Critical Ratio
	double cr;	// 8bytes
	
	// 優先度
	double priority_idx;	// 8 bytes
	
	// 交期
	int due_date;	// 4bytes 這個有可能是負數
	
	// 最早下機時間
	unsigned int newest_unload_dt;	// 4 bytes
		
	// 當前機台流程數組
	lot_machine * lot_machine_arr;	// 4 bytes
	
	// 當前機台流程組個數
	unsigned int lot_machine_arr_cnt; // 4 bytes
	
	// 標準剩餘時間arr
	unsigned int * std_left_dt_arr; // 4 bytes
	
	// 當前標準剩餘時間指針, 當上機的時候指針往下走
	// 到時候動態計算PI值的時候就不需要在循環中求解了.
	unsigned int * p_std_left_dt_idx;	// 4 bytes
	
};

// void lot_update_cr(lot * p_lot, unsigned int begin_dt, ptr_and_len * p_sequence_arr);

// copy機台到lot裏面, 客制化到lot的部份現在還沒有, 直接複製
void lot_copy_machines_2_select(lot * p_lot, machine * machine_arr, fpn_machine * p_fpn_machine_arr, unsigned int fpn_machine_cnt);

static int comp_end_dt_by_idx(const void *a, const void *b);
#endif