import { http } from './http';

export interface OrderFulfillmentItem {
  id: string;
  name: string;
  status: string;
  createdAt: string;
  updatedAt?: string;
}

export interface OrderFulfillmentDataSource {
  list(): Promise<OrderFulfillmentItem[]>;
  create(data: Partial<OrderFulfillmentItem>): Promise<OrderFulfillmentItem>;
  update(id: string, data: Partial<OrderFulfillmentItem>): Promise<OrderFulfillmentItem>;
  delete(id: string): Promise<void>;
}

class OrderFulfillmentApiDataSource implements OrderFulfillmentDataSource {
  async list() {
    const response = await http.get('/api/orderFulfillment/list');
    return response.data.data;
  }

  async create(data: Partial<OrderFulfillmentItem>) {
    const response = await http.post('/api/orderFulfillment', data);
    return response.data.data;
  }

  async update(id: string, data: Partial<OrderFulfillmentItem>) {
    const response = await http.put(`/api/orderFulfillment/${id}`, data);
    return response.data.data;
  }

  async delete(id: string) {
    await http.delete(`/api/orderFulfillment/${id}`);
  }
}

class OrderFulfillmentMockDataSource implements OrderFulfillmentDataSource {
  private items: OrderFulfillmentItem[] = [
    { id: '1', name: '示例项目 1', status: 'ACTIVE', createdAt: new Date().toISOString() },
    { id: '2', name: '示例项目 2', status: 'INACTIVE', createdAt: new Date().toISOString() },
  ];

  async list() {
    return this.items;
  }

  async create(data: Partial<OrderFulfillmentItem>) {
    const item: OrderFulfillmentItem = {
      id: String(this.items.length + 1),
      name: data.name || '',
      status: data.status || 'ACTIVE',
      createdAt: new Date().toISOString(),
    };
    this.items.push(item);
    return item;
  }

  async update(id: string, data: Partial<OrderFulfillmentItem>) {
    const index = this.items.findIndex(item => item.id === id);
    if (index >= 0) {
      this.items[index] = { ...this.items[index], ...data };
      return this.items[index];
    }
    throw new Error('Item not found');
  }

  async delete(id: string) {
    const index = this.items.findIndex(item => item.id === id);
    if (index >= 0) {
      this.items.splice(index, 1);
    }
  }
}

const useMock = process.env.NODE_ENV === 'development' || process.env.REACT_APP_USE_MOCK === 'true';
export const OrderFulfillmentDataSource: OrderFulfillmentDataSource = useMock
  ? new OrderFulfillmentMockDataSource()
  : new OrderFulfillmentApiDataSource();
