require 'db_mailer_rails'

namespace :db_mailer_rails do

desc 'Syncing DbMailerRails templates sync_file_path(default config/db_mailer_rails.yml) file with database.'
task :sync, [:force] => :environment do |_task, args|
  force = args[:force]
  mail_template_class = DbMailerRails.template_model_class.constantize

  config_path = Rails.root.join(DbMailerRails.sync_file_path).to_s
  mail_templates_from_file = YAML.load_file(config_path)

  # Remove from database if not exist in configuration file
  mail_template_class.where('db_mailer_class NOT IN(?)', mail_templates_from_file.keys).delete_all

  mail_templates_from_file.each do |db_mailer_class, attributes|
    db_mail_template = mail_template_class.find_or_initialize_by(db_mailer_class: db_mailer_class)
    next if !force && !db_mail_template.new_record?

    db_mail_template.assign_attributes(attributes)

    if db_mail_template.save
      puts "#{db_mailer_class} synchronization is successful."
    else
      puts "#{db_mailer_class} synchronization is failed."
    end
  end
end

end