module IdCard
  class Plan < ApplicationRecord
    belongs_to :setup, optional: true
    has_many :plan_benefits, dependent: :destroy
    accepts_nested_attributes_for :plan_benefits, allow_destroy: true, reject_if: :all_blank

    scope :templates, -> { where(template: true) }

    FARIOS_BENEFIT_FIELDS = ["Primary Visit", "Specialist Visit", "Urgent Care", "INN-Ind Ded", "INN-Family Ded", "OON-Ind Ded", "OON-Family Ded", "Co-Insurance", "INN-Ind OOP", "INN-Family OOP", "OON-Ind OOP", "OON-Family OOP", "Emergency Room", "Preventive Care"].freeze
    TANDEMLOC_BENEFIT_FIELDS = ["Physician Visit", "Specialist Visit", "Urgent Care", "Deductible", "Co-Insurance", "Out-of-Pocket", "Emergency Room", "Preventive Care"].freeze
    SMART_BENEFIT_FIELDS = [].freeze

    after_initialize :build_plan_benefits, if: :new_record?

    def build_plan_benefits
      if plan_benefits.empty?
        plan_benefit_fields = case setup&.card_template
                              when "TandemlocIDCard"
                                TANDEMLOC_BENEFIT_FIELDS
                              when "SmartIDCard"
                                SMART_BENEFIT_FIELDS
                              else
                                FARIOS_BENEFIT_FIELDS
                              end
        plan_benefit_fields.each_with_index do |bene, i|
          self.plan_benefits.build(benefit_desc: bene, sequence: (i + 1))
        end
      end
    end

    def format_template
      formatted_title = title
      if pl_plan_key.present?
        employer_name = Employer.find_by(pl_plan_key: pl_plan_key).pluck(:name)
        formatted_title.concat( " (#{employer_name})" )
      end
      { id: id, title: formatted_title }
    end

    class << self

      # def templates
      #   active_templates.map(&:format_template)
      # end

      def permitted_params(params)
            params.require(:id_card_setup).permit(
              plans_attributes: [
                :id,
                :title,
                :pb_product_key,
                :pl_plan_key,
                :_destroy,
                plan_benefits_attributes: [
                  :id,
                  :benefit_desc,
                  :benefit,
                  :sequence,
                  :_destroy,
                ]
              ] 
            )
      end

    end

    private

    def build_and_create_default_benefits
      benefits = IdCardBenefitsTemplate.find_by(title: "BLANK").id_card_benefits.sort_by(&:sequence)
      benefits.each do |ben|
        id_card_plan_benefits.new(benefit_desc: ben.benefit_desc, sequence: ben.sequence)
      end
    end
  end
end