# -*- encoding : utf-8 -*-

class Public::JoinsController < ApplicationController
	
	layout "public"
	skip_before_filter :verify_authenticity_token, :only => [:ipn]
  
  
  def select_sheet
    
    if !session[:sheet_id] or !(@sheet = Sheet.where(:id => session[:sheet_id]).first)
      @sheet = Sheet.new(:sheet_type => 1, :web => true)
      @sheet.people.build(:web => true)
      @sheet.sheet_years.build(:year => Renew::YEAR, :payment_type => 3)
    else
      
    end
    
    
    
  end
  
  def save_sheet
    
    
    if !session[:sheet_id] or !(@sheet = Sheet.where(:id => session[:sheet_id]).first)
      @sheet = Sheet.new(params.require(:sheet).permit!)


      if @sheet.save
        session[:sheet_id] = @sheet.id
      
        if @sheet.sheet_years.first.payment_type == 3
          redirect_to paid_by_paypal_public_joins_path
        else
          redirect_to paid_public_joins_path
        end
      
      else
        render action: "select_sheet"
 
      end
    else
      if @sheet.update_attributes(params.require(:sheet).permit!)
        session[:sheet_id] = @sheet.id
      
        if @sheet.sheet_years.first.payment_type == 3
          redirect_to paid_by_paypal_public_joins_path
        else
          redirect_to paid_public_joins_path
        end
      
      else
        render action: "select_sheet"
 
      end
      
      
    end
      
  end
  
  
  
  
  def paid
    @sheet = Sheet.where(:id => session[:sheet_id]).first
    if !@sheet or @sheet.ok
      redirect_to select_sheet_public_joins_path
    else
      
      respond_to do |format|
            format.html { }
           
      end
      
      
    end
  end

  def paid_by_paypal
    @sheet = Sheet.where(:id => session[:sheet_id]).first
    
    if @sheet and !@sheet.ok
      
    

    
      require 'paypal-sdk-merchant'
      @api = PayPal::SDK::Merchant::API.new

   
      @set_express_checkout = @api.build_set_express_checkout({
        :SetExpressCheckoutRequestDetails => {
          :custom => @sheet.id,
          :ReturnURL => do_paypal_payment_public_joins_url,
          :CancelURL => select_sheet_public_joins_url(),
          :NoShipping => 1,
          :PaymentDetails => [{
            :OrderTotal => {
              :currencyID => "EUR",
              :value =>@sheet.sheet_years.first.amount },
          
            :NotifyURL => "http://lepicvert.org"+ipn_public_joins_path,
            
            :PaymentDetailsItem => [{:Name => "Nouvelle adhésion",:Quantity => 1,:Amount => {:currencyID => "EUR",:value => @sheet.sheet_years.first.amount } }],
            :PaymentAction => "Sale" }] } })
    
      # Make API call & get response
      @set_express_checkout_response = @api.set_express_checkout(@set_express_checkout)
      
      # Access Response
      if @set_express_checkout_response.success?

        @get_express_checkout_details = @api.build_get_express_checkout_details({
          :Token => @sheet.id })

        @get_express_checkout_details_response = @api.get_express_checkout_details(@get_express_checkout_details)
      
      
      
      
        @payment_detail = @get_express_checkout_details_response.GetExpressCheckoutDetailsResponseDetails.PaymentDetails[0]
      
      
        redirect_to @api.express_checkout_url(@set_express_checkout_response.Token)
      else
        @set_express_checkout_response.Errors
      end
      
    else
      redirect_to select_sheet_public_joins_path()
    end
      
  end
  

  
  def do_paypal_payment
    
    
    require 'paypal-sdk-merchant'
    @api = PayPal::SDK::Merchant::API.new
    
    
    @get_express_checkout_details = @api.build_get_express_checkout_details({:Token => params[:token] })

    @get_express_checkout_details_response = @api.get_express_checkout_details(@get_express_checkout_details)




    # Access Response
    if @get_express_checkout_details_response.success?
      
      @sheet = Sheet.find(@get_express_checkout_details_response.GetExpressCheckoutDetailsResponseDetails.Custom.to_s)
      puts "AAA"
      puts @get_express_checkout_details_response.GetExpressCheckoutDetailsResponseDetails.Custom.to_s
      
    else
      
      
      @get_express_checkout_details_response.Errors
    end
    
    # Build request object
    @do_express_checkout_payment = @api.build_do_express_checkout_payment({
      :DoExpressCheckoutPaymentRequestDetails => {
        :PaymentAction => "Sale",
        :Token => params[:token],
        :PayerID => params[:PayerID],
        :PaymentDetails => [{
          :OrderTotal => {
            :currencyID => "EUR",
            :value => @sheet.sheet_years.first.amount },
          :NotifyURL => "http://lepicvert.org"+ipn_public_joins_path }] } })

    # Make API call & get response
    @do_express_checkout_payment_response = @api.do_express_checkout_payment(@do_express_checkout_payment)

    # Access Response
    if @do_express_checkout_payment_response.success?
      @payment_info = @do_express_checkout_payment_response.DoExpressCheckoutPaymentResponseDetails.PaymentInfo[0]
      
      @do_express_checkout_payment_response.DoExpressCheckoutPaymentResponseDetails
      @do_express_checkout_payment_response.FMFDetails
      
    
      
      
      
      
      
  
      if @payment_info.PaymentStatus.to_s == "Completed"
        
        @sheet.ok = true
        @sheet.save
        @sheet.done_return
        session[:sheet_id] = nil
         
        redirect_to thanks_public_joins_url
        
      else
        render :file => 'public/500.html', :status => 500, :layout => false
        
      end
      
      
    

      
      
      
    else
      render :file => 'public/500.html', :status => 500, :layout => false
    end
    
    
    
    
  end
	
  def ipn
    
    
    @api = PayPal::SDK::Merchant.new
      if @api.ipn_valid?(request.raw_post)  # return true or false
        @sheet = Sheet.find_by_token(params[:custom].to_s)
        if params[:payment_status] == "Completed"
        
          
     
          @sheet.paypal_test_ipn= params[:test_ipn]

          @sheet.paypal_txn_type = params[:txn_type]
          @sheet.paypal_txn_id = params[:txn_id]
          @sheet.paypal_payment_date = params[:payment_date]

          @sheet.paypal_payment_status = params[:payment_status]
          @sheet.paypal_reason_code = params[:reason_code]
          @sheet.paypal_payment_type = params[:payment_type]

          @sheet.paypal_mc_currency = params[:mc_currency]
          @sheet.paypal_mc_fee = params[:mc_fee]
          @sheet.paypal_mc_gross = params[:mc_gross]

          @sheet.paypal_residence_country = params[:residence_country]
          @sheet.paypal_last_name = params[:last_name]
          @sheet.paypal_first_name = params[:first_name]
          @sheet.paypal_payer_email = params[:payer_email]
          @sheet.paypal_payer_id = params[:payer_id]
          @sheet.paypal_payer_status = params[:payer_status]

          @sheet.paypal_receiver_id = params[:receiver_id]
          @sheet.paypal_receiver_email = params[:receiver_email]

          @sheet.paypal_protection_eligibility = params[:protection_eligibility]
          @sheet.paypal_ipn_track_id = params[:ipn_track_id]
          
          @sheet.save
          puts "le paiement de la commande #{@sheet.id} par paypal est validé"
        
        else
          @sheet.paypal_test_ipn= params[:test_ipn]

          @sheet.paypal_txn_type = params[:txn_type]
          @sheet.paypal_txn_id = params[:txn_id]
          @sheet.paypal_payment_date = params[:payment_date]

          @sheet.paypal_payment_status = params[:payment_status]
          @sheet.paypal_reason_code = params[:reason_code]
          @sheet.paypal_payment_type = params[:payment_type]

          @sheet.paypal_mc_currency = params[:mc_currency]
          @sheet.paypal_mc_fee = params[:mc_fee]
          @sheet.paypal_mc_gross = params[:mc_gross]

          @sheet.paypal_residence_country = params[:residence_country]
          @sheet.paypal_last_name = params[:last_name]
          @sheet.paypal_first_name = params[:first_name]
          @sheet.paypal_payer_email = params[:payer_email]
          @sheet.paypal_payer_id = params[:payer_id]
          @sheet.paypal_payer_status = params[:payer_status]

          @sheet.paypal_receiver_id = params[:receiver_id]
          @sheet.paypal_receiver_email = params[:receiver_email]

          @sheet.paypal_protection_eligibility = params[:protection_eligibility]
          @sheet.paypal_ipn_track_id = params[:ipn_track_id]
          @sheet.ok = false
          
          @sheet.save
          
          @sheet.done_return
         
        end
        
      else
        
      end
    render :inline => "test"
  end
  
  
  
  
end