class UpdateMasterSectionWithRespondentCategories < ActiveRecord::Migration[7.0]
  def up
    Project.includes(:respondent_categories, :master_sections).find_each do |project|
      Project.transaction do
        respondent_categories = project.respondent_categories.to_a
        project_master_sections = project.master_sections.to_a

        respondent_categories.each_with_index do |category, index|
          project_master_sections.each do |master_section|
            if index.zero?
              # Update existing section for first category
              master_section.update!(respondent_category_id: category.id)
            else
              # Create new section for subsequent categories
              cloned_master_section = master_section.dup
              cloned_master_section.respondent_category_id = category.id
              cloned_master_section.save!
            end
          rescue ActiveRecord::RecordInvalid => e
            Rails.logger.error "Failed to process MasterSection #{master_section.id} for RespondentCategory #{category.id}: #{e.message}"
            raise ActiveRecord::Rollback
          end
        end
      end
    end
  end

  def down
    # You can define the rollback logic here if necessary.
    raise ActiveRecord::IrreversibleMigration
  end
end
