class Customer < ApplicationRecord

  #self.primary_key = :customer_id

  before_create :generate_custom_id
  has_many :orders
  has_many :sales

  validates_presence_of :name, :contact_no, :email,:card_no
  validates :contact_no, uniqueness: true
  validates :email, uniqueness: true
  validates :card_no, uniqueness: true

  paginates_per 50

  def self.get_member_account(customer)
    membership      = MembershipSetting.find_by_membership_type("paypar_url")
    memberaction    = MembershipAction.find_by_membership_type("get_all_member_account")
    merchant_uid    = memberaction.merchant_account_id.to_s
    auth_token      = memberaction.auth_token.to_s
    url             = membership.gateway_url.to_s + memberaction.gateway_url.to_s
# urltest =self.url_exist?(url)

    begin
    response        = HTTParty.get(url, :body => { membership_id: customer.membership_id,merchant_uid:merchant_uid,auth_token:auth_token}.to_json,
                                             :headers => {
                                                      'Content-Type' => 'application/json',
                                                      'Accept'       => 'application/json'
                                              },
                                              :timeout => 10
                                        )
    rescue Net::OpenTimeout
      response = { status: false }

    rescue OpenURI::HTTPError
      response = { status: false}

    rescue SocketError
      response = { status: false}
    end

    return response;

  end

  def self.get_membership_transactions(customer)
    membership      = MembershipSetting.find_by_membership_type("paypar_url")
    memberaction    = MembershipAction.find_by_membership_type("get_member_transactions")
    merchant_uid    = memberaction.merchant_account_id.to_s
    auth_token      = memberaction.auth_token.to_s
    url             = membership.gateway_url.to_s + memberaction.gateway_url.to_s
# urltest =self.url_exist?(url)

    begin
    response        = HTTParty.get(url, :body => { membership_id: customer.membership_id,merchant_uid:merchant_uid,auth_token:auth_token}.to_json,
                                             :headers => {
                                                      'Content-Type' => 'application/json',
                                                      'Accept'       => 'application/json'
                                              },
                                              :timeout => 10
                                        )
    rescue Net::OpenTimeout
      response = { status: false }
      
    rescue OpenURI::HTTPError
      response = { status: false}

    rescue SocketError
      response = { status: false}
    end

    return response;

  end

  def self.update_membership
    membership      = MembershipSetting.find_by_membership_type("paypar_url")
    memberaction    = MembershipAction.find_by_membership_type("create_membership_customer")
    merchant_uid    = memberaction.merchant_account_id.to_s
    auth_token      = memberaction.auth_token.to_s
    url             = membership.gateway_url.to_s + memberaction.gateway_url.to_s

    @customers    = Customer.where("membership_type IS NOT NULL AND membership_id IS NULL")

    @customers.each do |customer|
        begin
        response     = HTTParty.post(url,
                       :body =>
                              { name: customer.name,phone: customer.contact_no,
                                email: customer.email,dob: customer.date_of_birth,
                                address: customer.address,nrc:customer.nrc_no,
                                card_no:customer.card_no,member_group_id: customer.membership_type,
                                merchant_uid:merchant_uid,auth_token:auth_token
                               }.to_json,
                       :headers => {
                                'Content-Type' => 'application/json',
                                'Accept'       => 'application/json'
                        })
        rescue Net::OpenTimeout
        response = { status: false }
        
        rescue OpenURI::HTTPError
          response = { status: false}

        rescue SocketError
          response = { status: false}
        end

    puts response.to_json

         if response["status"] == true
          status   = customer.update_attributes(membership_id: response["customer_datas"]["id"])
         end

  end
  end

  def self.search(search)
    if search
      # find(:all, :conditions => ['name LIKE ? OR contact_no LIKE ?', "%#{search}%", "%#{search}%"])
      where("name LIKE ? OR contact_no LIKE ? OR card_no LIKE ?", "%#{search}%", "%#{search}%", "%#{search}%",)
    else
      find(:all)
    end
  end

  def lastest_invoices
    sales.where(:customer_id => self.id).order("created_at desc").limit(5)
  end

  def self.count_customer
    all = self.all.count+1
    count = all-2

  end

   WALKIN   = "CUS-000000000001"
   TAKEAWAY = "CUS-000000000002"

  private
  def generate_custom_id
    self.customer_id = SeedGenerator.generate_id(self.class.name, "CUS")
  end
end
