class PacientesController < ApplicationController
  include DiaryHelper
  
  before_action :user_is_employee?
  before_action :set_user, only: [:edit, :update, :destroy, :status]
  before_action :set_trainers
  layout "admin"

  def index
    @trainer = params[:trainer_id] ? User.find(params[:trainer_id]) : current_user
    @users = User.where.not(last_plan: nil)
    if current_user.trainer?
      @users = @users.where(coach_id: @trainer.id)
    end
    @users = @users.order(last_plan: :desc).paginate(:page => params[:page])
    redirect_to "/recepcion" if current_user.role == "receptionist"
  end

  def search
    @search = params[:search]
    @users = User.search(@search).limit(10)
  end

  def new
    @user = User.new(kg: "", country: 135) #135 méxico
    @user.role = params[:role] if params[:role]
  end

  def update_photos
    @photo = Photo.new(photo_params)
    @photo.save
    redirect_to "/pacientes/#{@photo.user.safe_url}"
  end

  def show
    @today = Time.zone.now.to_date
    @user = User.find_by_safe_url(params[:id])
    @messages = current_user.messages.where(emisor_id: @user.id).or(@user.messages.where(emisor_id: current_user.id)).order(created_at: :asc)
    @message = Message.new(user_id: @user.safe_url)
    @plan = @user.plans.order(finish: :desc).first
    @medical_history = @user.medical_history
    @medical_history = MedicalHistory.create(user: @user) if @medical_history.nil?
    @photo = Photo.new(user_id: @user.id)
    if @plan
      @trainings = diario(@user, "entrenamiento")
      @meals = diario(@user, "alimentacion")
    end
    redirect_to "/expediente/#{@user.safe_url}" if current_user.role == "receptionist"
  end

  def edit
  end

  def recover_pass
    @user = User.find(params[:id])
    @password = @user.random_pass
    @user.update(password: @password, password_confirmation: @password)
    respond_to { |format| format.js }
  end
  
  def create
    @user = User.new(user_params)
    session[:temp_pass] = @user.random_pass
    if @user.email.blank?
      names = @user.full_name.downcase.split(" ").map { |n| "#{n[0]}#{n[1]}" }.join("")
      @user.email = "#{names}#{@user.id}@ntsclinic.com"
    end
    if @user.save
      redirect_to "/pacientes/#{@user.safe_url}"
    else
      render :new
    end
  end

  def update
    respond_to do |format|
      if @user.update(user_params)
        format.html { redirect_to "/pacientes/#{@user.safe_url}", notice: 'Tarjeta actualizada' }
        format.js {}
      else
        format.html { render :edit }
        format.js {}
      end
    end
  end

  def destroy
    if @user.id == current_user.id
      redirect_to "/pacientes", notice: "No te puedes eliminar a ti mismo"
    else
      @user.plans.each do |plan|
        plan.routines.each { |r| r.routine_workouts.delete_all }
        plan.routines.delete_all
        plan.meals.each { |m| m.meal_portions.delete_all }
        plan.meals.delete_all
        plan.destroy
      end
      @user.cards.delete_all
      @user.destroy
      redirect_to "/pacientes", notice: "Usuario Eliminado"
    end
  end

  def destroy_photos
    @id = params[:id]
    @photo = Photo.find(@id)
    if params[:attr]
      @photo.remove_image = true
    else
      @photo.destroy
    end
  end

  def photo_params
    params.require(:photo).permit(:user_id, :side, :back, :front, :weight)
  end

  def status
    @user.update(status: params[:status])
  end

  private

  def set_trainers
    @trainers = User.trainers
  end

  def set_user
    @user = User.find(params[:id])
  end

  def user_params
    params.require(:user).permit(:email, :mlag, :address, :status, :municipality, :country, :full_name, :role, :coach_id, :kg, :hidden_field, :presencial, :corporal_fat, :tmb, :tel, :dob, :avatar, :height, :sex, :metric_system, :reference_id, :federal_entity, :delegation, :cp)
  end

end