"use strict";

module.exports = function(grunt) {

    require("matchdep").filterDev("grunt-*").forEach(grunt.loadNpmTasks);

    var appConfig = {

        // Definindo os diretórios
        dirs: {
            js:   "assets/js",
            less: "assets/less",
            css:  "assets/css",
            img:  "assets/images"
        },

        // Metadata
        pkg: grunt.file.readJSON("package.json"),
        banner:
        "\n" +
        "/*\n" +
         " * -------------------------------------------------------\n" +
         " * Projeto: <%= pkg.title %>\n" +
         " * Versão: <%= pkg.version %>\n" +
         " *\n" +
         " * Autor:  <%= pkg.author.name %>\n" +
         " * Site:     <%= pkg.author.url %>\n" +
         " * Contato: <%= pkg.author.email %>\n" +
         " *\n" +
         " *\n" +
         " * Copyright (c) <%= grunt.template.today(\"yyyy\") %> <%= pkg.author.name %>\n" +
         " * -------------------------------------------------------\n" +
         " */\n" +
         "\n",

        // Observação de mudanças nos arquivos
        watch: {
            options: {
                livereload: false
            },
            css: {
                files: ["<%= dirs.less %>/{,*/}*.less"],
                tasks: ["less", "notify:less"]
            },
            js: {
                files: ["<%= jshint.all %>"],
                tasks: ["jshint", "uglify", "notify:js"]
            },
            html: {
                files: [
                    // carregamento automático do browser para as atualizações das extensões abaixo
                    "/*.{html,htm,shtml,shtm,xhtml,php,jsp,asp,aspx,erb,ctp}"
                ]
            }
        },

        // Validação de arquivos
        jshint: {
            options: {
                jshintrc: ".jshintrc"
            },
            all: [
                "Gruntfile.js",
                "<%= dirs.js %>/main.js"
            ]
        },

        // Minificação e concatenação de arquivos
        uglify: {
            options: {
                mangle: false,
                banner: "<%= banner %>"
            },
            dist: {
                files: {
                    "<%= dirs.js %>/main.min.js": [
                    "<%= dirs.js %>/main.js"
                    ]
                }
            }
        },

        // Compilacão de arquivos LESS para CSS
        less: {
            dist: {
                options: {
                    // ieCompat: true, // Compatível com o IE8
                    // report: 'gzip' // Verificar performance do LESS
                    banner: "<%= banner %>",
                    yuicompress: true // Comprime o arquivo de saída com o ccsmin.js
                },
                files: {
                    "<%= dirs.css %>/style.css": [
                    "<%= dirs.less %>/*.less"
                    ]
                }
            }
        },

        // Otimização de imagens
        imagemin: {
            dist: {
                options: {
                    optimizationLevel: 3,
                    progressive: true
                },
                files: [{
                    expand: true,
                    cwd: "<%= dirs.img %>/",
                    src: "<%= dirs.img %>/**",
                    dest: "<%= dirs.img %>/"
                }]
            }
        },

        // Notificações
        notify: {
          less: {
            options: {
              title: "LESS - <%= pkg.title %>",
              message: "Compilado e minificado com sucesso!"
            }
          },
          js: {
            options: {
              title: "Javascript - <%= pkg.title %>",
              message: "Minificado e validado com sucesso!"
            }
          },
          image: {
            options: {
              title: "<%= pkg.title %>",
              message: "Imagens otimizadas com sucesso!"
            }
          }
        },

        // Deploy via FTP
        "ftp-deploy": {
            build: {
                auth: {
                    host: "ftp.dominio.com.br",
                    port: 21,
                    authKey: "key1"
                },
                src: "/",
                dest: "/caminho/para/meu-projeto",
                exclusions: [
                    ".DS_Store",
                    "**/.DS_Store",
                    "**/Thumbs.db",
                    ".git/*",
                    ".gitignore",
                    "assets/less/*",
                    "node_modules/*",
                    ".ftppass",
                    ".jshintrc",
                    "Gruntfile.js",
                    "package.json",
                    "README.md",
                    "LICENSE.md"
                ]
            }
        }

    };


    // Iniciando as configurações do Grunt
    grunt.initConfig(appConfig);


    // Registrando as tarefas
    // --------------------------

    // Observar mudanças, concatenar, minificar e validar arquivos
    grunt.registerTask( "w", [ "watch" ]);

    // Optimizar imagens
    grunt.registerTask( "o", [ "imagemin", "notify:image" ]);

    // Deploy via FTP
    grunt.registerTask( "d", [ 'ftp-deploy' ] );

};
@@ -4905,24 +4905,28 @@
 -------%0A
+    
 %0A    // 
 Observar
@@ -4921,58 +4921,120 @@
  // 
-Observar mudan%C3%A7as, concatenar, minificar e validar
+Tarefa padr%C3%A3o%0A    grunt.registerTask( %22default%22, %5B %22jshint%22, %22less%22, %22uglify%22 %5D );%0A%0A    // Observar mudan%C3%A7as dos
  arq
@@ -5065,16 +5065,20 @@
 Task( %22w
+atch
 %22, %5B %22wa
@@ -5138,16 +5138,23 @@
 Task( %22o
+ptimize
 %22, %5B %22im
@@ -5178,16 +5178,17 @@
 image%22 %5D
+ 
 );%0A%0A    
@@ -5235,14 +5235,19 @@
 ( %22d
+eploy
 %22, %5B 
-'
+%22
 ftp-
@@ -5252,17 +5252,194 @@
 p-deploy
-'
+%22 %5D );%0A    %0A    %0A    // Aliases para as tarefas%0A    grunt.registerTask( %22w%22, %5B %22watch%22 %5D );%0A    grunt.registerTask( %22o%22, %5B %22optimize%22 %5D );%0A    grunt.registerTask( %22d%22, %5B %22deploy%22
  %5D );%0A%0A%7D
@@ -5439,8 +5439,9 @@
 %5D );%0A%0A%7D;
+%0A

fix #1