after 'development:grades', 'development:iso_countries' do
  def third_monday(year, month)
    date = Date.new year, month, 1
    offset = 1 - date.wday
    offset += 7 if offset.negative?
    date + offset + 14
  end

  puts 'building schools...'

  school_year_types = ENV['minimal'] ? [:semesters] : SchoolConfig.school_year_types.each_key
  school_year_types.each do |type|
    next if type.to_sym == :semester

    school = School.create!(
      name: "Tri-County #{type.capitalize}",
      motto: 'A place to be',
      time_zone: 'America/Chicago',
      logout_redirect: 0,
      first_grade_offered: 0,
      last_grade_offered: 12,
      country_id: 236,
      site_type: :internal,
      site_environment: :staging
    )

    school.create_school_config(school_year_type: type)

    school.create_employee_module(
      accounting: true,
      admissions: true,
      auction: true,
      facility: true,
      nursing: true,
      pt_conference: true
    )
    school.create_family_module(accounting: true, admissions: true)
    school.create_student_module

    academic_year = (Time.now.in_time_zone + 6.months).year
    stop = academic_year
    start = academic_year - 1

    year = school.school_years.build(
      current: true,
      academic_year: academic_year,
      name: "#{start}-#{stop}"
    )

    case type.to_sym
    when :semesters
      s1_start = third_monday start, 8
      s1_end = third_monday start, 12
      s2_start = third_monday stop, 1
      s2_end = third_monday stop, 5

      year.description = "#{year.name} School Year"
      year.q1_start = s1_start
      year.q2_start = third_monday start, 10
      year.q3_start = s2_start
      year.q4_start = third_monday stop, 3
      year.end = s2_end
      year.save
    when :trimesters # Trimester
      q1_start = third_monday start, 8
      q1_end = third_monday start, 10
      q2_start = third_monday start, 11
      q2_end = third_monday stop, 2
      q3_start = third_monday stop, 3
      q3_end = third_monday stop, 5


      year.description = "#{year.name} School Year"
      year.q1_start = q1_start
      year.q2_start = q2_start
      year.q3_start = q3_start
      year.end = q3_end
      year.save

    when :sessions # Session
      session_dates = {}

      session_dates[1] = third_monday start, 8
      session_dates[2] = third_monday start, 9
      session_dates[3] = third_monday start, 11
      session_dates[4] = third_monday start, 12
      session_dates[5] = third_monday stop, 1
      session_dates[6] = third_monday stop, 3

      first_day = session_dates[1]
      last_day = third_monday stop, 5

      year.description = "#{year.name} School Year"
      year.q1_start = session_dates[1]
      year.end = last_day
      year.save

      session = nil
      session_dates.each do |index, date|
        unless session.nil?
          session.end = date - 1
          session.save
        end

        session = school.school_year_sessions.build
        session.school_year = year
        session.sequence = index
        session.start = date
        session.name = "Session #{index}"
        session.description = "#{session.name} description"
      end
      session.end = last_day
      session.save
    end

    school.grades
  end
end
