# Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/

class CtiGenericApi < ActiveRecord::Migration[5.1]
  def up

    # return if it's a new setup
    return if !Setting.exists?(name: 'system_init_done')

    Setting.create_if_not_exists(
      title:       'cti integration',
      name:        'cti_integration',
      area:        'Integration::Switch',
      description: 'Defines if generic CTI is enabled or not.',
      options:     {
        form: [
          {
            display: '',
            null:    true,
            name:    'cti_integration',
            tag:     'boolean',
            options: {
              true  => 'yes',
              false => 'no',
            },
          },
        ],
      },
      state:       false,
      preferences: {
        prio:           1,
        trigger:        ['menu:render', 'cti:reload'],
        authentication: true,
        permission:     ['admin.integration'],
      },
      frontend:    true
    )
    Setting.create_if_not_exists(
      title:       'cti config',
      name:        'cti_config',
      area:        'Integration::Cti',
      description: 'Defines the cti config.',
      options:     {},
      state:       { 'outbound' => { 'routing_table' => [], 'default_caller_id' => '' }, 'inbound' => { 'block_caller_ids' => [] } },
      preferences: {
        prio:       2,
        permission: ['admin.integration'],
      },
      frontend:    false,
    )
    Setting.create_if_not_exists(
      title:       'CTI Token',
      name:        'cti_token',
      area:        'Integration::Cti',
      description: 'Token for cti.',
      options:     {
        form: [
          {
            display: '',
            null:    false,
            name:    'cti_token',
            tag:     'input',
          },
        ],
      },
      state:       SecureRandom.urlsafe_base64(20),
      preferences: {
        permission: ['admin.integration'],
      },
      frontend:    false
    )

    add_column :cti_logs, :queue, :string, limit: 250, null: true          if !column_exists?(:cti_logs, :queue)
    add_column :cti_logs, :initialized_at, :string, limit: 250, null: true if !column_exists?(:cti_logs, :initialized_at)
    add_column :cti_logs, :duration_waiting_time, :integer, null: true     if !column_exists?(:cti_logs, :duration_waiting_time)
    add_column :cti_logs, :duration_talking_time, :integer, null: true     if !column_exists?(:cti_logs, :duration_talking_time)

    # fixes issue #2183 - Mysql2::Error: Invalid default value for 'start_at'
    if ActiveRecord::Base.connection_db_config.configuration_hash[:adapter] == 'mysql2'
      # disable the MySQL strict_mode for the current connection
      execute("SET sql_mode = ''")

      change_column_default :cti_logs, :start, '0000-00-00 00:00:00'
      change_column_default :cti_logs, :end, '0000-00-00 00:00:00'
    end

    rename_column :cti_logs, :start, :start_at
    rename_column :cti_logs, :end, :end_at

  end
end