require "inifile"

# Класс для работы с конфигурацией INI-файла
class IniConfig
  attr :path

  # Конструктор класса, принимает путь к INI-файлу и парсит его содержимое
  def initialize(in_path = "config.ini")
    @path = in_path
    @config = {}
    parse_ini
  end

  # Метод для парсинга INI-файла и загрузки его содержимого в хэш
  def parse_ini()
    return if path.nil?
    return unless File.exist? path
    @config = IniFile.load(path)
  end

  # Метод для получения порта сервера из конфигурации, если он задан, иначе возвращает значение по умолчанию (8080)
  def get_port()
    unless @config["server"]["port"].nil?
      @config["server"]["port"].to_i
    else
      8080
    end
  end

  # Метод для получения репозитория из конфигурации, если он задан, иначе возвращает значение по умолчанию ("repo")
  def get_repo()
    unless @config["repo"]["repo"].nil?
      @config["repo"]["repo"].to_s
    else
      "repo"
    end
  end

  # Метод для получения базы данных из конфигурации, если она задана, иначе возвращает значение по умолчанию ("db")
  def get_db()
    unless @config["server"]["db"].nil?
      @config["server"]["db"].to_s
    else
      "db"
    end
  end

  # Метод для получения скрытых конфигураций из конфигурации, если они заданы, иначе возвращает пустой массив
  def get_configs_hide()
    unless @config["configs"]["hide"].nil?
      @config["configs"]["hide"].split(",").map { |item| item.strip }
    else
      []
    end
  end

  # Метод для получения выбранных конфигураций из конфигурации, если они заданы, иначе возвращает пустой массив
  def get_configs_selected()
    unless @config["configs"]["selected"].nil?
      @config["configs"]["selected"].split(",").map { |item| item.strip }
    else
      []
    end
  end

  # Метод для получения пути к проектам из конфигурации, если он задан, иначе возвращает значение по умолчанию ("projects")
  def get_projects_path()
    unless @config["projects"]["path"].nil?
      @config["projects"]["path"].to_s
    else
      "projects"
    end
  end

  # Метод для получения пути к счетчику из конфигурации, если он задан, иначе возвращает значение по умолчанию ("locks/counter")
  def get_counter_path()
    unless @config["counter"]["path"].nil?
      @config["counter"]["path"].to_s
    else
      "locks/counter"
    end
  end

  # Метод для получения пути к блокировке сборки из конфигурации, если он задан, иначе возвращает значение по умолчанию ("locks/build")
    def get_build_lock_path()
    unless @config["build"]["path"].nil?
      @config["build"]["path"].to_s
    else
      "locks/build"
    end
  end

  # Метод для получения количества элементов на странице из конфигурации, если оно задано и больше нуля, иначе возвращает значение по умолчанию (30)
  def get_items_per_page()
    unless @config["pages"]["items_per_page"].nil?
      res = @config["pages"]["items_per_page"].to_i
      if res < 1
        res = 30
      end
      res
    else
      30
    end
  end

  # Метод для получения пути к ключам из конфигурации, если он задан, иначе возвращает значение по умолчанию ("keys")
  def get_keys_path()
    unless @config["sign"]["path"].nil?
      @config["sign"]["path"].to_s
    else
      "keys"
    end
  end

  # Метод для получения пути к реповьюверу из конфигурации, если он задан, иначе возвращает значение по умолчанию ("repoview")
  def get_repoview_path()
    unless @config["repoview"]["path"].nil?
      @config["repoview"]["path"].to_s
    else
      "repoview"
    end
  end

  def get_time_zone
    unless @config["timezone"]["zone"].nil?
      @config["timezone"]["zone"].to_s
    else
      "Europe/Moscow"
    end
  end
end
