# -*- coding: utf-8 -*-
# == Schema Information
#
# Table name: calentries
#
#  id         :integer          not null, primary key
#  start      :datetime
#  ende       :datetime
#  summary    :string(255)
#  typ        :integer
#  created_at :datetime         not null
#  updated_at :datetime         not null
#

class Calentry < ActiveRecord::Base
  attr_accessible :ende, :start, :summary, :typ,:calendar_ids, :calendar, :dauer, :object_id, :object_type
  belongs_to :calendar, touch: true
  #belongs_to :neuigkeit
  validates :start, :presence => true
  validates :object, :presence => true
  validates :typ, :presence => true
  before_save :get_public
  belongs_to :object, polymorphic: true, touch: true # Objekt zu dem der Calentry gehört (derzeit ein Newsartikel)
  scope :of_month, ->(d) {where("start >= ? AND start <= ?", d.beginning_of_month, d.end_of_month)}
  scope :upcoming, ->{ where("start >= ?", Time.now).order(:start)}
  scope :recent,-> {  where("start <= ?", Time.now).order(:start).reverse_order}
  validate do |entry|
    if entry.ende.nil? 
      errors.add(:ende, "Es muss ein Endzeitpunkt vorhanden sein")
    end
  end  
  
  resourcify
  def  self.updated_at
    #Calentry.select("MAX(updated_at) as m_updated_at").first.m_updated_at
    Calentry.all.max_by(&:updated_at).updated_at
 end
  def is_upcomming?
    self.start > Time.now
  end
  def is_ongoing?
    (self.start < Time.now) && (Time.now < self.ende) 
  end
  def is_past?
    (Time.now > self.ende) 
  end
  def days_to_today
    if self.is_ongoing? 
      0
    else
      if self.is_upcomming?
        (self.start.to_date - Date.today).to_i.abs
      elsif self.is_past?
        (self.ende.to_date - Date.today).to_i.abs
      end
    end

  end
  def get_public
    self.calendar=self.object.calendar unless object.nil? || object.calendar.nil?
    self.public = (self.try(:object).nil?)? (self.calendar.try(:public?)) : object.try(:public?)
    true
  end
  def s_time=(s_time)
    start 
  end
  def start_time
    start
  end
  def start1
    start.to_date
  end
  def dauer
if self.ende.nil? && self.start.nil? 
0 
else
self.ende = self.start if self.ende.nil?
    (self.ende-self.start)/3600 
end
  end
  def dauer=(dauer)
    self.ende=self.start+dauer.to_i.hours 
  end
  def name
    unless self.object.nil?
      self.object.title
    else
      summary
    end
  end
  def icon_text
    ApplicationController.helpers.fa_icon("calendar 2x") + self.text
  end
  def text
    if self.start.nil? || self.ende.nil? 
      "error" 
    else
      if  (self.start.to_date - self.ende.to_date) < 1.day
        format=:timeonly
      else
        format =:default
      end
      I18n.l(self.start) +" "+ I18n.t("cal.bis")+" "+ I18n.l(self.ende, :format=>format) 
    end
  end
  scope :public, -> { where(:public => :true) } 
 # scope :upcoming, -> { where("start >= ?" , Time.now).where("start <= ?", 28.days.from_now) }
end
