require 'colored2'
require 'sym/app/commands/base_command'
module Sym
  module App
    module Commands
      class ShowExamples < BaseCommand
        required_options :examples
        try_after :show_help

        def execute
          output = []

          output << example(comment: 'generate a new private key into an environment variable:',
                            command: 'export mykey=$(sym -g)',
                            echo:    'echo $mykey',
                            result:  '75ngenJpB6zL47/8Wo7Ne6JN1pnOsqNEcIqblItpfg4='.green)

          output << example(comment: 'generate a new password-protected key & save to a file',
                            command: 'sym -gp -o ~/.key',
                            echo:    'New Password     : ' + '••••••••••'.green,
                            result:  'Confirm Password : ' + '••••••••••'.green)

          output << example(comment: 'encrypt a plain text string with a key, and save the output to a file',
                            command: 'sym -e -s ' + '"secret string"'.bold.yellow + ' -k $mykey -o file.enc',
                            echo:    'cat file.enc',
                            result:  'Y09MNDUyczU1S0UvelgrLzV0RTYxZz09CkBDMEw4Q0R0TmpnTm9md1QwNUNy%T013PT0K'.green)

          output << example(comment: 'decrypt a previously encrypted string:',
                            command: 'sym -d -s $(cat file.enc) -k $mykey',
                            result:  'secret string'.green)

          output << example(comment: 'encrypt sym.yml and save it to sym.enc:',
                            command: 'sym -e -f sym.yml -o sym.enc -k $mykey')

          output << example(comment: 'decrypt an encrypted file and print it to STDOUT:',
                            command: 'sym -df sym.enc -k $mykey')

          output << example(comment: 'edit an encrypted file in $EDITOR, ask for key, create file backup',
                            command: 'sym -tibf ecrets.enc',
                            result:  '
Private Key: ••••••••••••••••••••••••••••••••••••••••••••
Saved encrypted content to sym.enc.

Diff:
3c3
'.white.dark + '# (c) 2015 Konstantin Gredeskoul.  All rights reserved.'.red.bold  + '
---' + '
# (c) 2016 Konstantin Gredeskoul.  All rights reserved.'.green.bold)


          if Sym::App.is_osx?
          output << example(comment: 'generate a new password-encrypted key, save it to your Keychain:',
                            command: 'sym -gpx mykey -o ~/.key')

          output << example(comment: 'use the new key to encrypt a file:',
                            command: 'sym -x mykey -e -f password.txt -o passwords.enc')

          output << example(comment: 'use the new key to inline-edit the encrypted file:',
                            command: 'sym -x mykey -t -f sym.yml')
          end

          output.flatten.compact.join("\n")
        end

        def example(comment: nil, command: nil, echo: nil, result: nil)
          out = []
          out << "# #{comment}".white.dark.italic if comment
          out << command if command
          out << echo if echo
          out << result if result
          out << '—'*80
        end
      end
    end
  end
end