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

=begin

build new subject with ticket number in there

  ticket = Ticket.find(123)
  result = ticket.subject_build('some subject', is_reply_true_false)

returns

  result = "[Ticket#1234567] some subject"

=end

  def subject_build(subject, is_reply = false)

    # clena subject
    subject = subject_clean(subject)

    ticket_hook         = Setting.get('ticket_hook')
    ticket_hook_divider = Setting.get('ticket_hook_divider')
    ticket_subject_re   = Setting.get('ticket_subject_re')
    if is_reply && !ticket_subject_re.empty?
      subject = "#{ticket_subject_re}: #{subject}"
    end

    # none position
    if Setting.get('ticket_hook_position') == 'none'
      return subject
    end

    # right position
    if Setting.get('ticket_hook_position') == 'right'
      return subject + " [#{ticket_hook}#{ticket_hook_divider}#{number}]"
    end

    # left position
    "[#{ticket_hook}#{ticket_hook_divider}#{number}] " + subject
  end

=begin

clean subject remove ticket number and other not needed chars

  ticket = Ticket.find(123)
  result = ticket.subject_clean('[Ticket#1234567] some subject')

returns

  result = "some subject"

=end

  def subject_clean(subject)
    ticket_hook         = Setting.get('ticket_hook')
    ticket_hook_divider = Setting.get('ticket_hook_divider')
    ticket_subject_size = Setting.get('ticket_subject_size')

    # remove all possible ticket hook formats with []
    subject = subject.gsub(/\[#{ticket_hook}: #{number}\](\s+?|)/, '')
    subject = subject.gsub(/\[#{ticket_hook}:#{number}\](\s+?|)/, '')
    subject = subject.gsub(/\[#{ticket_hook}#{ticket_hook_divider}#{number}\](\s+?|)/, '')

    # remove all possible ticket hook formats without []
    subject = subject.gsub(/#{ticket_hook}: #{number}(\s+?|)/, '')
    subject = subject.gsub(/#{ticket_hook}:#{number}(\s+?|)/, '')
    subject = subject.gsub(/#{ticket_hook}#{ticket_hook_divider}#{number}(\s+?|)/, '')

    # remove leading "..:\s" and "..[\d+]:\s" e. g. "Re: " or "Re[5]: "
    subject = subject.gsub(/^(..(\[\d+\])?:\s)+/, '')

    # resize subject based on config
    if subject.length > ticket_subject_size.to_i
      subject = subject[ 0, ticket_subject_size.to_i ] + '[...]'
    end

    subject.gsub!(/^[[:space:]]+/, '')
    subject.gsub!(/[[:space:]]+$/, '')
    subject
  end
end
