/**
 * 栏舍模型
 * @file Pen.js
 * @description 栏舍信息数据模型
 */

const { DataTypes, Model } = require('sequelize');
const sequelize = require('../config/database');

class Pen extends Model {
  // 获取动物类型文本
  getAnimalTypeText() {
    return this.animal_type || '未知';
  }

  // 获取状态文本
  getStatusText() {
    return this.status ? '开启' : '关闭';
  }

  // 获取容量使用率（如果有当前动物数量的话）
  getCapacityUsageRate() {
    // 这里可以根据实际业务需求计算
    return 0;
  }

  // 检查容量是否足够
  isCapacitySufficient(requiredCapacity) {
    return (this.capacity - this.getCurrentAnimalCount()) >= requiredCapacity;
  }

  // 获取当前动物数量（需要根据实际业务实现）
  getCurrentAnimalCount() {
    // 这里应该查询当前栏舍中的动物数量
    // 暂时返回0，实际实现时需要关联查询
    return 0;
  }
}

Pen.init({
  id: {
    type: DataTypes.BIGINT,
    primaryKey: true,
    autoIncrement: true,
    comment: '栏舍ID'
  },
  name: {
    type: DataTypes.STRING(50),
    allowNull: false,
    comment: '栏舍名称',
    validate: {
      notEmpty: {
        msg: '栏舍名称不能为空'
      },
      len: {
        args: [1, 50],
        msg: '栏舍名称长度应在1-50个字符之间'
      }
    }
  },
  animal_type: {
    type: DataTypes.ENUM('马', '牛', '羊', '家禽', '猪'),
    allowNull: false,
    comment: '动物类型',
    validate: {
      notEmpty: {
        msg: '动物类型不能为空'
      },
      isIn: {
        args: [['马', '牛', '羊', '家禽', '猪']],
        msg: '动物类型必须是：马、牛、羊、家禽、猪中的一个'
      }
    }
  },
  pen_type: {
    type: DataTypes.STRING(50),
    allowNull: true,
    comment: '栏舍类型',
    validate: {
      len: {
        args: [0, 50],
        msg: '栏舍类型长度不能超过50个字符'
      }
    }
  },
  responsible: {
    type: DataTypes.STRING(20),
    allowNull: false,
    comment: '负责人',
    validate: {
      notEmpty: {
        msg: '负责人不能为空'
      },
      len: {
        args: [1, 20],
        msg: '负责人姓名长度应在1-20个字符之间'
      }
    }
  },
  capacity: {
    type: DataTypes.INTEGER,
    allowNull: false,
    defaultValue: 1,
    comment: '容量',
    validate: {
      min: {
        args: 1,
        msg: '容量不能小于1'
      },
      max: {
        args: 10000,
        msg: '容量不能超过10000'
      },
      isInt: {
        msg: '容量必须是整数'
      }
    }
  },
  status: {
    type: DataTypes.BOOLEAN,
    allowNull: false,
    defaultValue: true,
    comment: '状态：true-开启，false-关闭'
  },
  description: {
    type: DataTypes.TEXT,
    allowNull: true,
    comment: '备注信息',
    validate: {
      len: {
        args: [0, 1000],
        msg: '备注信息长度不能超过1000个字符'
      }
    }
  },
  farm_id: {
    type: DataTypes.BIGINT,
    allowNull: true,
    comment: '所属农场ID',
    references: {
      model: 'farms',
      key: 'id'
    }
  },
  creator: {
    type: DataTypes.STRING(50),
    allowNull: false,
    defaultValue: 'admin',
    comment: '创建人'
  }
}, {
  sequelize,
  modelName: 'Pen',
  tableName: 'pens',
  timestamps: true,
  createdAt: 'created_at',
  updatedAt: 'updated_at',
  comment: '栏舍管理表',
  indexes: [
    {
      fields: ['name']
    },
    {
      fields: ['animal_type']
    },
    {
      fields: ['farm_id']
    },
    {
      fields: ['status']
    },
    {
      fields: ['created_at']
    }
  ]
});

module.exports = Pen;
