import { DataTypes } from 'sequelize';
import sequelize from '../database.js';

const BillingTemplateField = sequelize.define('BillingTemplateField', {
  id: {
    type: DataTypes.INTEGER,
    primaryKey: true,
    autoIncrement: true,
    allowNull: false
  },
  templateId: {
    type: DataTypes.INTEGER,
    allowNull: false,
    field: 'template_id'
  },
  fieldKey: {
    type: DataTypes.STRING(120),
    allowNull: false,
    field: 'field_key'
  },
  label: {
    type: DataTypes.STRING(255),
    allowNull: false
  },
  fieldType: {
    type: DataTypes.ENUM('text', 'number', 'currency', 'date', 'checkbox', 'formula', 'table_row'),
    allowNull: false,
    field: 'field_type'
  },
  sourceType: {
    type: DataTypes.ENUM('manual', 'member', 'trainer', 'club', 'system', 'constant', 'formula'),
    allowNull: false,
    defaultValue: 'manual',
    field: 'source_type'
  },
  sourcePath: {
    type: DataTypes.STRING(255),
    allowNull: true,
    field: 'source_path'
  },
  constantValue: {
    type: DataTypes.STRING(500),
    allowNull: true,
    field: 'constant_value'
  },
  formatter: {
    type: DataTypes.ENUM('none', 'iban_no_country', 'date_dd_mm_yyyy', 'currency_eur_2'),
    allowNull: false,
    defaultValue: 'none'
  },
  isRequired: {
    type: DataTypes.BOOLEAN,
    allowNull: false,
    defaultValue: false,
    field: 'is_required'
  },
  mappingMode: {
    type: DataTypes.ENUM('acroform', 'overlay'),
    allowNull: false,
    defaultValue: 'overlay',
    field: 'mapping_mode'
  },
  acroformFieldName: {
    type: DataTypes.STRING(255),
    allowNull: true,
    field: 'acroform_field_name'
  },
  pageNumber: {
    type: DataTypes.INTEGER,
    allowNull: true,
    field: 'page_number'
  },
  x: {
    type: DataTypes.DECIMAL(10, 2),
    allowNull: true
  },
  y: {
    type: DataTypes.DECIMAL(10, 2),
    allowNull: true
  },
  width: {
    type: DataTypes.DECIMAL(10, 2),
    allowNull: true
  },
  height: {
    type: DataTypes.DECIMAL(10, 2),
    allowNull: true
  },
  fontSize: {
    type: DataTypes.DECIMAL(5, 2),
    allowNull: true,
    field: 'font_size'
  },
  align: {
    type: DataTypes.ENUM('left', 'center', 'right'),
    allowNull: true
  },
  formulaExpression: {
    type: DataTypes.STRING(1000),
    allowNull: true,
    field: 'formula_expression'
  },
  tableGroup: {
    type: DataTypes.STRING(100),
    allowNull: true,
    field: 'table_group'
  },
  rowIndex: {
    type: DataTypes.INTEGER,
    allowNull: true,
    field: 'row_index'
  },
  sortOrder: {
    type: DataTypes.INTEGER,
    allowNull: false,
    defaultValue: 0,
    field: 'sort_order'
  }
}, {
  tableName: 'billing_template_field',
  underscored: true,
  timestamps: true
});

export default BillingTemplateField;
