# Copyright © 2011-2019 MUSC Foundation for Research Development~
# All rights reserved.~

# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:~

# 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.~

# 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following~
# disclaimer in the documentation and/or other materials provided with the distribution.~

# 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products~
# derived from this software without specific prior written permission.~

# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,~
# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT~
# SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL~
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS~
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR~
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.~

class CreateJoinTableProtocolStudyPhase < ActiveRecord::Migration[4.2]
  def change
    create_join_table :protocols, :study_phases do |t|
      t.index [:protocol_id, :study_phase_id]
      t.index [:study_phase_id, :protocol_id]
    end

    # Populate join table
    Protocol.all.each do |protocol|
      if protocol.read_attribute(:study_phase).present?
        old_study_phases = { 'I'=> 'i', 'II'=> 'ii', 'III'=> 'iii', 'IV'=> 'iv' }
        old_study_phase_of_protocol = old_study_phases.select{ |k, v| v == protocol.read_attribute(:study_phase) }
        all_study_phases = StudyPhase.all
        study_phase = all_study_phases.select{ |sp| sp.phase == old_study_phase_of_protocol.keys.first }
        protocol.study_phases << study_phase
        protocol.save
      end
    end
  end
end
