require 'deliver/app_screenshot'
require_relative 'module'
require_relative 'device_types'
require_relative 'frame_downloader'

module Frameit
  # Responsible for finding the correct device
  class TemplateFinder
    # This will detect the screen size and choose the correct template
    def self.get_template(screenshot)
      return nil if screenshot.mac?

      filename = create_file_name(screenshot.device_name, screenshot.color.nil? ? screenshot.default_color : screenshot.color)
      templates = Dir["#{FrameDownloader.templates_path}/#{filename}.{png,jpg}"] # ~/.frameit folder

      UI.verbose("Looking for #{filename} and found #{templates.count} template(s)")

      return filename if Helper.test?
      if templates.count == 0 && !screenshot.color.nil? && screenshot.color != screenshot.default_color
        filename = create_file_name(screenshot.device_name, screenshot.default_color)
        UI.important("Unfortunately device type '#{screenshot.device_name}' is not available in #{screenshot.color}, falling back to " + (screenshot.default_color.nil? ? "default" : screenshot.default_color) + "...")
        templates = Dir["#{FrameDownloader.templates_path}/#{filename}.{png,jpg}"] # ~/.frameit folder
        UI.verbose("Looking for #{filename} and found #{templates.count} template(s)")
      end

      if templates.count == 0
        if screenshot.deliver_screen_id == DEVICE_SCREEN_IDS[DisplayType::APP_IPHONE_35]
          UI.important("Unfortunately 3.5\" device frames were discontinued. Skipping screen '#{screenshot.path}'")
          UI.error("Looked for: '#{filename}.png'")
        else
          UI.error("Couldn't find template for screenshot type '#{filename}'")
          UI.error("Please run `fastlane frameit download_frames` to download the latest frames")
        end
        return nil
      else
        return templates.first.tr(" ", "\ ")
      end
    end

    def self.create_file_name(device_name, color)
      return "#{device_name} #{color}" unless color.nil?
      return device_name
    end
  end
end
