const EpidemicActivity = require('../models/EpidemicActivity');
const { Op } = require('sequelize');

// 获取防疫活动列表
const getEpidemicActivities = async (req, res) => {
  try {
    const { 
      page = 1, 
      pageSize = 20, 
      activityName, 
      livestockCategory, 
      diseaseCategory,
      activityStatus 
    } = req.query;

    const offset = (page - 1) * pageSize;
    const where = {};

    // 构建查询条件
    if (activityName) {
      where.activityName = {
        [Op.like]: `%${activityName}%`
      };
    }
    if (livestockCategory) {
      where.livestockCategory = livestockCategory;
    }
    if (diseaseCategory) {
      where.diseaseCategory = diseaseCategory;
    }
    if (activityStatus) {
      where.activityStatus = activityStatus;
    }

    const { count, rows } = await EpidemicActivity.findAndCountAll({
      where,
      limit: parseInt(pageSize),
      offset: parseInt(offset),
      order: [['updatedAt', 'DESC']]
    });

    res.json({
      code: 200,
      message: '获取成功',
      data: {
        list: rows,
        total: count,
        page: parseInt(page),
        pageSize: parseInt(pageSize)
      }
    });
  } catch (error) {
    console.error('获取防疫活动列表失败:', error);
    res.status(500).json({
      code: 500,
      message: '服务器内部错误',
      error: error.message
    });
  }
};

// 根据ID获取防疫活动
const getEpidemicActivityById = async (req, res) => {
  try {
    const { id } = req.params;
    const activity = await EpidemicActivity.findByPk(id);
    
    if (!activity) {
      return res.status(404).json({
        code: 404,
        message: '防疫活动不存在'
      });
    }

    res.json({
      code: 200,
      message: '获取成功',
      data: activity
    });
  } catch (error) {
    console.error('获取防疫活动详情失败:', error);
    res.status(500).json({
      code: 500,
      message: '服务器内部错误',
      error: error.message
    });
  }
};

// 创建防疫活动
const createEpidemicActivity = async (req, res) => {
  try {
    const {
      activityName,
      livestockCategory,
      diseaseCategory,
      vaccineUsed,
      vaccineBatch,
      preventionDate,
      activityStatus = 'active'
    } = req.body;

    const activity = await EpidemicActivity.create({
      activityName,
      livestockCategory,
      diseaseCategory,
      vaccineUsed,
      vaccineBatch,
      preventionDate,
      activityStatus
    });

    res.status(201).json({
      code: 201,
      message: '创建成功',
      data: activity
    });
  } catch (error) {
    console.error('创建防疫活动失败:', error);
    res.status(500).json({
      code: 500,
      message: '服务器内部错误',
      error: error.message
    });
  }
};

// 更新防疫活动
const updateEpidemicActivity = async (req, res) => {
  try {
    const { id } = req.params;
    const {
      activityName,
      livestockCategory,
      diseaseCategory,
      vaccineUsed,
      vaccineBatch,
      preventionDate,
      activityStatus
    } = req.body;

    const activity = await EpidemicActivity.findByPk(id);
    if (!activity) {
      return res.status(404).json({
        code: 404,
        message: '防疫活动不存在'
      });
    }

    await activity.update({
      activityName,
      livestockCategory,
      diseaseCategory,
      vaccineUsed,
      vaccineBatch,
      preventionDate,
      activityStatus
    });

    res.json({
      code: 200,
      message: '更新成功',
      data: activity
    });
  } catch (error) {
    console.error('更新防疫活动失败:', error);
    res.status(500).json({
      code: 500,
      message: '服务器内部错误',
      error: error.message
    });
  }
};

// 删除防疫活动
const deleteEpidemicActivity = async (req, res) => {
  try {
    const { id } = req.params;
    const activity = await EpidemicActivity.findByPk(id);
    
    if (!activity) {
      return res.status(404).json({
        code: 404,
        message: '防疫活动不存在'
      });
    }

    await activity.destroy();

    res.json({
      code: 200,
      message: '删除成功'
    });
  } catch (error) {
    console.error('删除防疫活动失败:', error);
    res.status(500).json({
      code: 500,
      message: '服务器内部错误',
      error: error.message
    });
  }
};

// 切换活动状态
const toggleActivityStatus = async (req, res) => {
  try {
    const { id } = req.params;
    const activity = await EpidemicActivity.findByPk(id);
    
    if (!activity) {
      return res.status(404).json({
        code: 404,
        message: '防疫活动不存在'
      });
    }

    const newStatus = activity.activityStatus === 'active' ? 'inactive' : 'active';
    await activity.update({ activityStatus: newStatus });

    res.json({
      code: 200,
      message: '状态更新成功',
      data: activity
    });
  } catch (error) {
    console.error('切换活动状态失败:', error);
    res.status(500).json({
      code: 500,
      message: '服务器内部错误',
      error: error.message
    });
  }
};

module.exports = {
  getEpidemicActivities,
  getEpidemicActivityById,
  createEpidemicActivity,
  updateEpidemicActivity,
  deleteEpidemicActivity,
  toggleActivityStatus
};
