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

class FirstStepsController < ApplicationController
  prepend_before_action :authentication_check

  def index
    return if !access?

    invite_agents = false
    #if User.of_role('Agent').count > 2
    #  invite_agents = true
    #end
    invite_customers = false
    #if User.of_role('Customer').count > 2
    #  invite_customers = true
    #end

    chat_active = false
    if Setting.get('chat')
      chat_active = true
    end
    from_active = false
    if Setting.get('form_ticket_create')
      from_active = true
    end
    twitter_active = false
    if Channel.where(area: 'Twitter::Account').count.positive?
      twitter_active = true
    end
    facebook_active = false
    if Channel.where(area: 'Facebook::Account').count.positive?
      facebook_active = true
    end
    email_active = false
    if Channel.where(area: 'Email::Account').count.positive?
      email_active = true
    end
    text_module_active = false
    if TextModule.count.positive?
      text_module_active = true
    end
    macro_active = false
    if Macro.count > 1
      macro_active = true
    end

    if current_user.permissions?('admin')

      result = [
        {
          name: 'Configuration',
          items: [
            {
              name: 'Branding',
              checked: true,
              location: '#settings/branding',
            },
            {
              name: 'Your Email Configuration',
              checked: email_active,
              location: '#channels/email',
            },
            {
              name: 'Invite agents/colleagues to help working on tickets',
              checked: invite_agents,
              location: '#',
              class: 'js-inviteAgent',
            },
            {
              name: 'Invite customers to create issues in Zammad',
              checked: invite_customers,
              location: '#',
              class: 'js-inviteCustomer',
            },
          ],
        },
        {
          name: 'How to use it',
          items: [
            {
              name: 'Intro',
              checked: true,
              location: '#clues',
            },
            {
              name: 'Create a Test Ticket',
              checked: false,
              location: '#',
              class: 'js-testTicket',
            },
            {
              name: 'Create Text Modules',
              checked: text_module_active,
              location: '#manage/text_modules',
            },
            {
              name: 'Create Macros',
              checked: macro_active,
              location: '#manage/macros',
            },
            #{
            #  name: 'Create Overviews',
            #  checked: false,
            #  location: '#manage/overviews',
            #},
          ],
        },
        {
          name: 'Additional Channels',
          items: [
            {
              name: 'Twitter',
              checked: twitter_active,
              location: '#channels/twitter',
            },
            {
              name: 'Facebook',
              checked: facebook_active,
              location: '#channels/facebook',
            },
            {
              name: 'Chat',
              checked: chat_active,
              location: '#channels/chat',
            },
            {
              name: 'Online Forms',
              checked: from_active,
              location: '#channels/form',
            },
          ],
        },
      ]

      check_availability(result)

      render json: result
      return
    end

    result = [
      {
        name: 'How to use it',
        items: [
          {
            name: 'Intro',
            checked: true,
            location: '#clues',
          },
          {
            name: 'Create a Test Ticket',
            checked: false,
            location: '#',
            class: 'js-testTicket',
          },
          {
            name: 'Invite customers to create issues in Zammad',
            checked: invite_customers,
            location: '#',
            class: 'js-inviteCustomer',
          },
        ],
      },
    ]

    check_availability(result)

    render json: result
  end

  def test_ticket
    return if !access?

    agent = current_user
    customer = test_customer
    from = "#{customer.fullname} <#{customer.email}>"
    original_user_id = UserInfo.current_user_id
    result = NotificationFactory::Mailer.template(
      template: 'test_ticket',
      locale: agent.preferences[:locale] || 'en-us',
      objects:  {
        agent: agent,
        customer: customer,
      },
      raw: true,
    )
    UserInfo.current_user_id = customer.id
    ticket = Ticket.create!(
      group_id: Group.find_by(active: true, name: 'Users').id,
      customer_id: customer.id,
      title: result[:subject],
    )
    article = Ticket::Article.create!(
      ticket_id: ticket.id,
      type_id: Ticket::Article::Type.find_by(name: 'phone').id,
      sender_id: Ticket::Article::Sender.find_by(name: 'Customer').id,
      from: from,
      body: result[:body],
      content_type: 'text/html',
      internal: false,
    )
    UserInfo.current_user_id = original_user_id
    overview = test_overview
    assets = ticket.assets({})
    assets = article.assets(assets)
    assets = overview.assets(assets)
    render json: {
      overview_id: overview.id,
      ticket_id: ticket.id,
      assets: assets,
    }
  end

  private

  def test_overview
    Overview.find_by(name: 'Unassigned & Open')
  end

  def test_customer
    User.find_by(login: 'nicole.braun@zammad.org')
  end

  def access?
    return true if current_user.permissions?(['admin', 'ticket.agent'])
    render json: []
    false
  end

  def check_availability(result)
    test_ticket_active = true
    overview = test_overview

    if !overview
      test_ticket_active = false
    elsif overview.updated_by_id != 1
      test_ticket_active = false
    end
    if !test_customer
      test_ticket_active = false
    end
    if Group.where(active: true, name: 'Users').count.zero?
      test_ticket_active = false
    end
    return result if test_ticket_active
    result.each { |item|
      items = []
      item[:items].each { |local_item|
        next if local_item[:name] == 'Create a Test Ticket'
        items.push local_item
      }
      item[:items] = items
    }
    result
  end

end
