import { FieldVersion } from '../types/field';

/**
 * 地块版本历史示例数据
 * 用于演示版本管理功能
 */

/**
 * 为指定地块生成示例版本历史数据
 */
export const generateSampleVersions = (fieldId: string, fieldCode: string): FieldVersion[] => {
  const baseDate = new Date('2024-01-15');
  
  return [
    // 版本1：创建地块
    {
      id: `${fieldId}-v1`,
      fieldId,
      version: 1,
      changeType: 'create',
      changes: [],
      coordinates: [
        { lat: 30.5728, lng: 114.2943 },
        { lat: 30.5730, lng: 114.2943 },
        { lat: 30.5730, lng: 114.2948 },
        { lat: 30.5728, lng: 114.2948 },
      ],
      attributes: {
        id: fieldId,
        code: fieldCode,
        name: '东区1号地块',
        area: 15.5,
        perimeter: 520,
        location: '湖北省武汉市江夏区',
        soilType: 'loamy',
        landUseType: 'farmland',
        plantingMode: 'open-field',
        owner: '张三',
        ownerPhone: '13800138001',
        contractPeriod: 30,
        tags: ['优质地块'],
        status: 'normal',
      },
      changedBy: '系统管理员',
      changedAt: baseDate.toISOString(),
      remarks: '创建地块',
    },

    // 版本2：更新基本信息
    {
      id: `${fieldId}-v2`,
      fieldId,
      version: 2,
      changeType: 'update-attributes',
      changes: [
        {
          field: 'area',
          oldValue: 15.5,
          newValue: 16.2,
        },
        {
          field: 'owner',
          oldValue: '张三',
          newValue: '张三（已确权）',
        },
        {
          field: 'certificateNumber',
          oldValue: undefined,
          newValue: 'JX202401001',
        },
      ],
      changedBy: '王芳',
      changedAt: new Date(baseDate.getTime() + 15 * 24 * 60 * 60 * 1000).toISOString(),
      remarks: '完善权属信息，更新实测面积',
    },

    // 版本3：添加标签
    {
      id: `${fieldId}-v3`,
      fieldId,
      version: 3,
      changeType: 'update-attributes',
      changes: [
        {
          field: 'tags',
          oldValue: ['优质地块'],
          newValue: ['优质地块', '高产田', '水源充足'],
        },
      ],
      changedBy: '李明',
      changedAt: new Date(baseDate.getTime() + 45 * 24 * 60 * 60 * 1000).toISOString(),
      remarks: '根据实地考察添加标签',
    },

    // 版本4：调整边界
    {
      id: `${fieldId}-v4`,
      fieldId,
      version: 4,
      changeType: 'update-boundary',
      changes: [
        {
          field: 'coordinates',
          oldValue: 4,
          newValue: 5,
        },
        {
          field: 'area',
          oldValue: 16.2,
          newValue: 16.8,
        },
        {
          field: 'perimeter',
          oldValue: 520,
          newValue: 545,
        },
      ],
      coordinates: [
        { lat: 30.5728, lng: 114.2943 },
        { lat: 30.5730, lng: 114.2943 },
        { lat: 30.5731, lng: 114.2946 },
        { lat: 30.5730, lng: 114.2948 },
        { lat: 30.5728, lng: 114.2948 },
      ],
      changedBy: '测绘组-赵强',
      changedAt: new Date(baseDate.getTime() + 90 * 24 * 60 * 60 * 1000).toISOString(),
      remarks: '使用RTK重新测绘，边界更精确',
    },

    // 版本5：更新土壤信息
    {
      id: `${fieldId}-v5`,
      fieldId,
      version: 5,
      changeType: 'update-attributes',
      changes: [
        {
          field: 'soilType',
          oldValue: 'loamy',
          newValue: 'clay',
        },
        {
          field: 'elevation',
          oldValue: undefined,
          newValue: 45,
        },
        {
          field: 'slope',
          oldValue: undefined,
          newValue: 3.5,
        },
      ],
      changedBy: '农技员-孙莉',
      changedAt: new Date(baseDate.getTime() + 120 * 24 * 60 * 60 * 1000).toISOString(),
      remarks: '土壤检测后更新土壤类型，补充地形数据',
    },

    // 版本6：更改种植模式
    {
      id: `${fieldId}-v6`,
      fieldId,
      version: 6,
      changeType: 'update-attributes',
      changes: [
        {
          field: 'plantingMode',
          oldValue: 'open-field',
          newValue: 'greenhouse',
        },
        {
          field: 'waterSource',
          oldValue: undefined,
          newValue: '水渠灌溉',
        },
      ],
      changedBy: '张三',
      changedAt: new Date(baseDate.getTime() + 180 * 24 * 60 * 60 * 1000).toISOString(),
      remarks: '建设温室大棚，改变种植模式',
    },

    // 版本7：补充坡向信息
    {
      id: `${fieldId}-v7`,
      fieldId,
      version: 7,
      changeType: 'update-attributes',
      changes: [
        {
          field: 'aspect',
          oldValue: undefined,
          newValue: '东南',
        },
        {
          field: 'remarks',
          oldValue: undefined,
          newValue: '光照条件良好，适合蔬菜种植',
        },
      ],
      changedBy: '农技员-孙莉',
      changedAt: new Date(baseDate.getTime() + 210 * 24 * 60 * 60 * 1000).toISOString(),
      remarks: '完善地块基础信息',
    },

    // 版本8：更新联系方式
    {
      id: `${fieldId}-v8`,
      fieldId,
      version: 8,
      changeType: 'update-attributes',
      changes: [
        {
          field: 'ownerPhone',
          oldValue: '13800138001',
          newValue: '13900139001',
        },
      ],
      changedBy: '系统管理员',
      changedAt: new Date(baseDate.getTime() + 250 * 24 * 60 * 60 * 1000).toISOString(),
      remarks: '应权属人要求更新联系电话',
    },
  ];
};

/**
 * 初始化示例版本数据到localStorage
 */
export const initializeSampleVersions = (fieldId: string, fieldCode: string): void => {
  try {
    const key = `field_versions_${fieldId}`;
    
    // 检查是否已有数据
    const existing = localStorage.getItem(key);
    if (existing) {
      console.log(`地块 ${fieldCode} 的版本数据已存在，跳过初始化`);
      return;
    }
    
    // 生成示例数据
    const versions = generateSampleVersions(fieldId, fieldCode);
    
    // 保存到localStorage
    localStorage.setItem(key, JSON.stringify(versions));
    
    console.log(`已为地块 ${fieldCode} (ID: ${fieldId}) 生成 ${versions.length} 条版本历史`);
  } catch (error) {
    console.error('初始化示例版本数据失败:', error);
  }
};

/**
 * 批量初始化多个地块的示例版本
 */
export const initializeMultipleFieldVersions = (): void => {
  try {
    // 获取所有地块
    const fieldsData = localStorage.getItem('smart_agriculture_fields');
    if (!fieldsData) {
      console.log('未找到地块数据，无法初始化版本历史');
      return;
    }
    
    const fields = JSON.parse(fieldsData);
    
    // 只为前3个地块生成示例数据
    const fieldsToInit = fields.slice(0, 3);
    
    fieldsToInit.forEach((field: any) => {
      initializeSampleVersions(field.id, field.code);
    });
    
    console.log(`已为 ${fieldsToInit.length} 个地块初始化版本历史`);
  } catch (error) {
    console.error('批量初始化失败:', error);
  }
};

/**
 * 清除指定地块的示例版本数据
 */
export const clearSampleVersions = (fieldId: string): void => {
  try {
    const key = `field_versions_${fieldId}`;
    localStorage.removeItem(key);
    console.log(`已清除地块 ${fieldId} 的版本数据`);
  } catch (error) {
    console.error('清除版本数据失败:', error);
  }
};

/**
 * 清除所有地块的版本数据
 */
export const clearAllVersions = (): void => {
  try {
    const fieldsData = localStorage.getItem('smart_agriculture_fields');
    if (!fieldsData) return;
    
    const fields = JSON.parse(fieldsData);
    fields.forEach((field: any) => {
      clearSampleVersions(field.id);
    });
    
    console.log('已清除所有地块的版本数据');
  } catch (error) {
    console.error('清除所有版本数据失败:', error);
  }
};
