// ADempiere-Vue (Frontend) for ADempiere ERP & CRM Smart Business Solution
// Copyright (C) 2017-Present E.R.P. Consultores y Asociados, C.A.
// Contributor(s): Yamel Senih ysenih@erpya.com www.erpya.com
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

// This file is used for set a static values for references of fields,
// currently exists for ADempiere metadata distints display types and are represented for follow:
export const DEFAULT_SIZE = {
  xs: 6,
  sm: 8,
  md: 2,
  lg: 6,
  xl: 6
}

// Account Element
export const ACCOUNT_ELEMENT = {
  id: 25,
  isSupported: false,
  valueType: 'INTEGER',
  componentPath: 'FieldText',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Amount (Number with 4 decimals)
export const AMOUNT = {
  id: 12,
  isSupported: true,
  valueType: 'DECIMAL',
  componentPath: 'FieldNumber',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Resource Assignment
export const RESOURCE_ASSIGNMENT = {
  id: 33,
  isSupported: false,
  valueType: 'INTEGER',
  componentPath: 'FieldText',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Binary Data (display type BLOB)
export const BINARY_DATA = {
  id: 23,
  isSupported: true,
  valueType: 'INTEGER',
  componentPath: 'FieldBinary',
  size: {
    xs: 6,
    sm: 6,
    md: 6,
    lg: 6,
    xl: 6
  }
}

// Button
export const BUTTON = {
  // this component is hidden
  id: 28,
  isSupported: true,
  valueType: 'STRING',
  componentPath: 'FieldButton',
  size: {
    xs: 0,
    sm: 0,
    md: 0,
    lg: 0,
    xl: 0
  }
}

// Chart
export const CHART = {
  id: 53370,
  isSupported: false,
  valueType: 'STRING',
  componentPath: 'FieldText',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Color
export const COLOR = {
  id: 27,
  isSupported: false,
  valueType: 'INTEGER',
  componentPath: 'FieldColor',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Cost or Prices
export const COSTS_PLUS_PRICES = {
  id: 37,
  isSupported: true,
  valueType: 'DECIMAL',
  componentPath: 'FieldNumber',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Date
export const DATE = {
  id: 15,
  isSupported: true,
  valueType: 'DATE',
  componentPath: 'FieldDate',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Date with time
export const DATE_PLUS_TIME = {
  id: 16,
  isSupported: true,
  valueType: 'DATE',
  componentPath: 'FieldDate',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Local File
export const LOCAL_FILE = {
  id: 39,
  isSupported: true,
  valueType: 'STRING',
  componentPath: 'FieldText',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Local File Path
export const LOCAL_FILE_PATH = {
  id: 38,
  isSupported: true,
  valueType: 'STRING',
  componentPath: 'FieldText',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Local File Path or Name
export const LOCAL_FILE_PATH_OR_NAME = {
  id: 53670,
  isSupported: true,
  valueType: 'STRING',
  componentPath: 'FieldText',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// ID
export const ID = {
  id: 13,
  isSupported: true,
  valueType: 'INTEGER',
  componentPath: 'FieldNumber',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Binary Image Data
export const IMAGE = {
  id: 32,
  isSupported: true,
  valueType: 'INTEGER',
  componentPath: 'FieldImage',
  size: {
    xs: 6,
    sm: 6,
    md: 6,
    lg: 6,
    xl: 6
  }
}

// Integer
export const INTEGER = {
  id: 11,
  isSupported: true,
  valueType: 'INTEGER',
  componentPath: 'FieldNumber',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Reference List
export const LIST = {
  id: 17,
  isSupported: true,
  valueType: 'STRING',
  componentPath: 'FieldSelect',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Location Address
export const LOCATION_ADDRESS = {
  id: 21,
  isSupported: true,
  valueType: 'INTEGER',
  componentPath: 'FieldLocation',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Warehouse Locator Data type
export const LOCATOR_WAREHOUSE = {
  id: 31,
  isSupported: true,
  valueType: 'INTEGER',
  componentPath: 'FieldLocator',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Memo
export const MEMO = {
  id: 34,
  isSupported: true,
  valueType: 'STRING',
  componentPath: 'FieldTextLong',
  size: {
    xs: 24,
    sm: 24,
    md: 24,
    lg: 24,
    xl: 24
  }
}

// Float Number
export const NUMBER = {
  id: 22,
  isSupported: true,
  valueType: 'DECIMAL',
  componentPath: 'FieldNumber',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Printer Name
export const PRINTER_NAME = {
  id: 42,
  isSupported: true,
  valueType: 'STRING',
  componentPath: 'FieldText',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Product Attribute
export const PRODUCT_ATTRIBUTE = {
  id: 35,
  isSupported: false,
  valueType: 'INTEGER',
  componentPath: 'FieldText',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Quantity
export const QUANTITY = {
  id: 29,
  isSupported: true,
  valueType: 'DECIMAL',
  componentPath: 'FieldNumber',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Search
export const SEARCH = {
  id: 30,
  isSupported: true,
  valueType: 'INTEGER',
  componentPath: 'FieldSelect',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Char (display type String)
export const CHAR = {
  id: 10,
  isSupported: true,
  valueType: 'STRING',
  componentPath: 'FieldText',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Table List
export const TABLE = {
  id: 18,
  isSupported: true,
  valueType: 'INTEGER',
  componentPath: 'FieldSelect',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Table Dir
export const TABLE_DIRECT = {
  id: 19,
  isSupported: true,
  valueType: 'INTEGER',
  componentPath: 'FieldSelect',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Text
export const TEXT = {
  id: 14,
  isSupported: true,
  valueType: 'STRING',
  componentPath: 'FieldText',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Text Long
export const TEXT_LONG = {
  id: 36,
  isSupported: true,
  valueType: 'STRING',
  componentPath: 'FieldTextLong',
  size: {
    xs: 24,
    sm: 24,
    md: 24,
    lg: 24,
    xl: 24
  }
}

// Time
export const TIME = {
  id: 24,
  isSupported: true,
  valueType: 'DATE',
  componentPath: 'FieldTime',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// URL
export const URL = {
  id: 40,
  isSupported: true,
  valueType: 'STRING',
  componentPath: 'FieldText',
  size: {
    xs: 24,
    sm: 12,
    md: 8,
    lg: 6,
    xl: 6
  }
}

// Yes No
export const YES_NO = {
  id: 20,
  isSupported: true,
  valueType: 'BOOLEAN',
  componentPath: 'FieldYesNo',
  size: {
    xs: 14,
    sm: 8,
    md: 8,
    lg: 3,
    xl: 6
  }
}

export const FIELDS_LOOKUP = [
  LIST.id,
  TABLE.id,
  TABLE_DIRECT.id,
  SEARCH.id,
  ACCOUNT_ELEMENT.id,
  LOCATION_ADDRESS.id,
  LOCATOR_WAREHOUSE.id,
  PRODUCT_ATTRIBUTE.id,
  RESOURCE_ASSIGNMENT.id
]

// Some helper methods
export function isLookup(displayType) {
  return FIELDS_LOOKUP.includes(displayType)
}

/**
 * All references
 * {number} id: Identifiert to field reference
 * {string|array} valueType: to convert and send server with gRPC
 * {boolean} isSupported: Indicate if field is suported
 */
const REFERENCES = [
  ACCOUNT_ELEMENT,
  AMOUNT,
  RESOURCE_ASSIGNMENT,
  BINARY_DATA,
  BUTTON,
  CHART,
  COLOR,
  COSTS_PLUS_PRICES,
  DATE,
  DATE_PLUS_TIME,
  LOCAL_FILE,
  LOCAL_FILE_PATH,
  LOCAL_FILE_PATH_OR_NAME,
  ID,
  IMAGE,
  INTEGER,
  LIST,
  LOCATION_ADDRESS,
  LOCATOR_WAREHOUSE,
  MEMO,
  NUMBER,
  PRINTER_NAME,
  PRODUCT_ATTRIBUTE,
  QUANTITY,
  SEARCH,
  // String as CHAR
  CHAR,
  TABLE,
  TABLE_DIRECT,
  TEXT,
  TEXT_LONG,
  TIME,
  URL,
  YES_NO
]
export default REFERENCES

export const FIELDS_RANGE = [
  AMOUNT,
  COSTS_PLUS_PRICES,
  DATE,
  DATE_PLUS_TIME,
  INTEGER,
  NUMBER,
  QUANTITY,
  TIME
]

/**
 * Fields not showed in panel's
 */
export const FIELDS_HIDDEN = [
  BUTTON
]

export const COLUMN_IS_ACTIVE = {
  columnName: 'IsActive', // column name of field
  defaultValue: true, // default value when loading
  valueIsReadOnlyForm: false, // value that activates read-only form
  isChangedAllForm: false // change the entire form to read only including this field
}

export const COLUMN_PROCESSED = {
  columnName: 'Processed',
  defaultValue: false,
  valueIsReadOnlyForm: true,
  isChangedAllForm: true
}

export const COLUMN_PROCESSING = {
  columnName: 'Processing',
  defaultValue: true,
  valueIsReadOnlyForm: false,
  isChangedAllForm: true
}

export const COLUMNS_NAME_READ_ONLY = [
  COLUMN_IS_ACTIVE.columnName,
  COLUMN_PROCESSED.columnName,
  COLUMN_PROCESSING.columnName
]

/**
 * Fields with this column name, changed all fields is read only
 */
export const COLUMNS_READ_ONLY_FORM = [
  COLUMN_IS_ACTIVE,
  COLUMN_PROCESSED,
  COLUMN_PROCESSING
]

export const FIELDS_DECIMALS = [
  AMOUNT.id,
  COSTS_PLUS_PRICES.id,
  NUMBER.id,
  QUANTITY.id
]

export const FIELDS_QUANTITY = [
  AMOUNT.id,
  COSTS_PLUS_PRICES.id,
  INTEGER.id,
  NUMBER.id,
  QUANTITY.id
]

/**
 * Manage the currency prefix/sufix in the format to display
 */
export const FIELDS_CURRENCY = [
  AMOUNT.id,
  COSTS_PLUS_PRICES.id
]
