JpegRecompress = require(‘imagemin-jpeg-recompress’)

module.exports = class TaskHelper extends require(‘./abstract’)

getGruntTask: ->
  'imagemin'

getGruntTaskTarget: ->
  "graspi-image-min-imagemin-#{super()}"

isEnabled: ->
  return false unless super() == true
  return false unless @getConfig().imageMin.enabled == true
  return false unless @_.isObject(@getAppConfig().images)

  true

isJpegRecompressEnabled: ->
  return false unless @_.isObject(@getConfig().imageMin.jpegRecompressPlugin)

  @getConfig().imageMin.jpegRecompressPlugin.enabled == true

buildConfig: ->
  cfg                           = {}
  cfg.options                   = {}
  cfg.options.optimizationLevel = @getConfig().imageMin.optimizationLevel
  cfg.options.progressive       = @getConfig().imageMin.progressive
  cfg.options.interlaced        = @getConfig().imageMin.interlaced
  cfg.options.use               = []

  cfg.files = [{
    expand: true
    src: ["#{@getDestFullPath()}/{,*/}*.{jpeg,jpg,gif,png}"]
    filter: (path) =>
      changed = @fileCacheHasChanged(path)

      @fileCacheUpdate(path) if changed == true

      changed
  }]

  if @isJpegRecompressEnabled()
    jpegCompressPluginConfig = @buildJpegCompressPluginConfig()
    cfg.options.use.push JpegRecompress(jpegCompressPluginConfig)

  cfg

buildJpegCompressPluginConfig: ->
  pluginConfig = @getConfig().imageMin.jpegRecompressPlugin

  cfg = {}

  cfg.loops       = pluginConfig.loops
  cfg.accurate    = pluginConfig.accurate
  cfg.quality     = pluginConfig.quality
  cfg.method      = pluginConfig.method
  cfg.target      = pluginConfig.target
  cfg.min         = pluginConfig.min
  cfg.max         = pluginConfig.max
  cfg.defish      = pluginConfig.defish
  cfg.progressive = pluginConfig.progressive
  cfg.subsample   = pluginConfig.subsample

  cfg