FactoryBot.define do
  sequence :object_manager_attribute_name do |n|
    "internal_name#{n}"
  end

  sequence :object_manager_attribute_display do |n|
    "Display Name #{n}"
  end
end

FactoryBot.define do
  factory :object_manager_attribute, class: ObjectManager::Attribute do

    object_lookup_id { ObjectLookup.by_name('Ticket') }
    name    { generate(:object_manager_attribute_name) }
    display { generate(:object_manager_attribute_display) }
    data_option_new do
      {}
    end
    editable true
    active   true
    screens  do
      {
        'create_top' => {
          '-all-' => {
            'null' => false
          }
        },
        'edit'       => {}
      }
    end
    add_attribute(:to_create) { true }
    to_migrate    true
    to_delete     false
    to_config     false
    position      15
    updated_by_id 1
    created_by_id 1
  end

  factory :object_manager_attribute_text, parent: :object_manager_attribute do
    data_type   'input'
    data_option do
      {
        'type'      => 'text',
        'maxlength' => 200,
        'null'      => true,
        'translate' => false,
        'default'   => '',
        'options'   => {},
        'relation'  => '',
      }
    end
  end

  factory :object_manager_attribute_integer, parent: :object_manager_attribute do
    data_type   'integer'
    data_option do
      {
        'default' => 0,
        'min'     => 0,
        'max'     => 9999,
      }
    end
  end

  factory :object_manager_attribute_date, parent: :object_manager_attribute do
    name        'date_attribute'
    data_type   'date'
    data_option do
      {
        'future' => true,
        'past'   => true,
        'diff'   => 24,
        'null'   => true,
      }
    end
  end

  factory :object_manager_attribute_datetime, parent: :object_manager_attribute do
    name        'datetime_attribute'
    data_type   'datetime'
    data_option do
      {
        'future' => true,
        'past'   => true,
        'diff'   => 24,
        'null'   => true,
      }
    end
  end

  factory :object_manager_attribute_select, parent: :object_manager_attribute do
    data_type   'select'
    data_option do
      {
        'default'    => '',
        'options'    => {
          'key_1' => 'value_1',
          'key_2' => 'value_2',
          'key_3' => 'value_3',
        },
        'relation'   => '',
        'nulloption' => true,
        'multiple'   => false,
        'null'       => true,
        'translate'  => true,
        'maxlength'  => 255
      }
    end
  end

  factory :object_manager_attribute_tree_select, parent: :object_manager_attribute do
    data_type 'tree_select'
    data_option do
      {
        'options'    => [
          {
            'name'     => 'Incident',
            'value'    => 'Incident',
            'children' => [
              {
                'name'     => 'Hardware',
                'value'    => 'Incident::Hardware',
                'children' => [
                  {
                    'name'  => 'Monitor',
                    'value' => 'Incident::Hardware::Monitor'
                  },
                  {
                    'name'  => 'Mouse',
                    'value' => 'Incident::Hardware::Mouse'
                  },
                  {
                    'name'  => 'Keyboard',
                    'value' => 'Incident::Hardware::Keyboard'
                  }
                ]
              },
              {
                'name'     => 'Softwareproblem',
                'value'    => 'Incident::Softwareproblem',
                'children' => [
                  {
                    'name'  => 'CRM',
                    'value' => 'Incident::Softwareproblem::CRM'
                  },
                  {
                    'name'  => 'EDI',
                    'value' => 'Incident::Softwareproblem::EDI'
                  },
                  {
                    'name'     => 'SAP',
                    'value'    => 'Incident::Softwareproblem::SAP',
                    'children' => [
                      {
                        'name'  => 'Authentication',
                        'value' => 'Incident::Softwareproblem::SAP::Authentication'
                      },
                      {
                        'name'  => 'Not reachable',
                        'value' => 'Incident::Softwareproblem::SAP::Not reachable'
                      }
                    ]
                  },
                  {
                    'name'     => 'MS Office',
                    'value'    => 'Incident::Softwareproblem::MS Office',
                    'children' => [
                      {
                        'name'  => 'Excel',
                        'value' => 'Incident::Softwareproblem::MS Office::Excel'
                      },
                      {
                        'name'  => 'PowerPoint',
                        'value' => 'Incident::Softwareproblem::MS Office::PowerPoint'
                      },
                      {
                        'name'  => 'Word',
                        'value' => 'Incident::Softwareproblem::MS Office::Word'
                      },
                      {
                        'name'  => 'Outlook',
                        'value' => 'Incident::Softwareproblem::MS Office::Outlook'
                      }
                    ]
                  }
                ]
              }
            ]
          },
          {
            'name'     => 'Service request',
            'value'    => 'Service request',
            'children' => [
              {
                'name'  => 'New software requirement',
                'value' => 'Service request::New software requirement'
              },
              {
                'name'  => 'New hardware',
                'value' => 'Service request::New hardware'
              },
              {
                'name'  => 'Consulting',
                'value' => 'Service request::Consulting'
              }
            ]
          },
          {
            'name'  => 'Change request',
            'value' => 'Change request'
          }
        ],
        'default'    => '',
        'null'       => true,
        'relation'   => '',
        'maxlength'  => 255,
        'nulloption' => true,
      }
    end
  end
end
