// Layout：布局计算器，负责任务条和依赖线的布局
export default class Layout {
  constructor(tasks, config) {
    this.tasks = tasks;
    this.config = config;
  }
  // 计算任务条布局
  computeTaskLayout() {
    // 简单实现：每个任务一行，计算左侧（start）、宽度（end-start）
    const layout = [];
    this.tasks.forEach((task, idx) => {
      const startPixel = this.dateToPixel(task.start);
      const endPixel = this.dateToPixel(task.end);
      layout.push({
        id: task.id,
        top: idx * 32,
        left: startPixel,
        width: endPixel - startPixel,
        height: 28,
        color: this.getTaskColor(task)
      });
    });
    return layout;
  }
  // 计算依赖线布局（可扩展）
  computeDependencyLines() {
    // 返回依赖线的起止坐标
    return [];
  }
  // 工具：日期转像素
  dateToPixel(date) {
    const start = new Date(this.config.startDate);
    const d = new Date(date);
    const scaleMap = { day: 40, week: 80, month: 200, quarter: 600 };
    const scale = scaleMap[this.config.timeScale] || 80;
    let diff = 0;
    if (this.config.timeScale === 'day') {
      diff = (d - start) / (1000 * 3600 * 24);
    } else if (this.config.timeScale === 'week') {
      diff = (d - start) / (1000 * 3600 * 24 * 7);
    } else if (this.config.timeScale === 'month') {
      diff = (d.getFullYear() - start.getFullYear()) * 12 + (d.getMonth() - start.getMonth());
    } else if (this.config.timeScale === 'quarter') {
      diff = ((d.getFullYear() - start.getFullYear()) * 12 + (d.getMonth() - start.getMonth())) / 3;
    }
    return diff * scale;
  }
  // 工具：获取任务颜色
  getTaskColor(task) {
    const group = this.config.groupBy;
    if (group && task.dimensions && task.dimensions[group]) {
      const id = task.dimensions[group].id;
      return this.config.colors && this.config.colors[group] && this.config.colors[group][id] ? this.config.colors[group][id] : '#409EFF';
    }
    return '#409EFF';
  }
} 