#! /usr/bin/env bash
source bashlib
cd "${0%/*}/../MasterPassword/Resources/Media"
PATH+=:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
temp="${TMPDIR:-/tmp}/.$$.convertImages"
mkdir "$temp" || err "Couldn't create temp directory." || return
trap 'rmdir "$temp"' EXIT

downsize() {
    local from=$1 to=$2 size=${3:-50%}
    convert "$from" -filter box -resize "$size" -unsharp 1x1+1+0.4 "$to"
    pngcrush -d "$temp" -rem gAMA -rem cHRM -rem sRGB -rem iCCP "$to" && mv "$temp/"* "$to"
}



inf "Converting appiconsets"
icons=(
    [114]="Icon@2x.png"
    [120]="Icon-60@2x.png"
    [80]="Icon-40@2x.png"
    [144]="Icon-72@2x.png"
    [58]="Icon-Small@2x.png"
    [100]="Icon-Small-50@2x.png"
    [512]="iTunesArtwork"
)
for size in $(reverse "${!icons[@]}"); do
    file=Images.xcassets/AppIcon.appiconset/${icons[size]}
    echo "$PWD/$file"

    if [[ "iTunesArtwork@2x.png" -nt $file ]]; then
        pinf "$file ($size px)"
            downsize "iTunesArtwork@2x.png" "$file" "${size}x${size}"
        fnip
    fi
done



inf "Populating iconsets"
icons=(
    "icon_512x512.png"
    "icon_256x256@2x.png"
    "icon_256x256.png"
    "icon_128x128@2x.png"
    "icon_128x128.png"
    "icon_32x32@2x.png"
    "icon_32x32.png"
    "icon_16x16@2x.png"
    "icon_16x16.png"
)
for iconset in *.iconset; do
    [[ -d $iconset ]] || continue

    for dest in "${icons[@]}"; do
        src=$iconset/icon_512x512@2x.png
        dest=$iconset/$dest
        IFS='_x@.' read _ _ points scale _ <<< "${dest##*/}"
        [[ $scale = *[^[:digit:]]* ]] && scale=1
        size=$(( points * scale ))

        if [[ ! -e $dest || "$src" -nt "$dest" ]]; then
            pinf "$src -> $dest ($size px)"
                downsize "$src" "$dest" "$size"
            fnip
        fi
    done
done


hr
inf "Converting @2x/-hd artwork"
for file in ./**/*{@2x,-ipadhd,-hd}.png; do
    inArray "${file##*/}" "${icons[@]}" && continue
    [[ ! -e $file ]] && continue

    dest=${file/@(@2x|-hd)}
    dest=${dest/-ipadhd/-ipad}

    if [[ $file = Default* ]]; then
        read width height < <(identify -format '%w %h' "$file")
        if (( width > height )); then
            emit "Rotating $file" --
                mogrify -rotate 90 "$file"
            emit -$?
        fi
    fi
    if [[ ! -e $dest || "$dest" -ot "$file" ]]; then
        pinf "$file -> $dest"
            downsize "$file" "$dest"
        fnip
    fi
done