require 'api/entities'
require 'api/helpers'

module Gitlab
  class API < Grape::API
    format :json
    helpers APIHelpers

    # Users API
    resource :users do
      before { authenticate! }

      # GET /users
      get do
        @users = User.all
        present @users, :with => Entities::User
      end

      # GET /users/:id
      get ":id" do
        @user = User.find(params[:id])
        present @user, :with => Entities::User
      end
    end

    # GET /user
    get "/user" do
      authenticate!
      present @current_user, :with => Entities::User
    end

    # Projects API
    resource :projects do
      before { authenticate! }

      # GET /projects
      get do
        @projects = current_user.projects
        present @projects, :with => Entities::Project
      end

      # GET /projects/:id
      get ":id" do
        @project = current_user.projects.find_by_code(params[:id])
        present @project, :with => Entities::Project
      end

      # GET /projects/:id/repository/branches
      get ":id/repository/branches" do
        @project = current_user.projects.find_by_code(params[:id])
        present @project.repo.heads.sort_by(&:name), :with => Entities::ProjectRepositoryBranches
      end

      # GET /projects/:id/repository/tags
      get ":id/repository/tags" do
        @project = current_user.projects.find_by_code(params[:id])
        present @project.repo.tags.sort_by(&:name).reverse, :with => Entities::ProjectRepositoryTags
      end
    end
  end
end