module Gitlab
  class BuildDataBuilder
    class << self
      def build(build)
        project = build.project
        commit = build.pipeline
        user = build.user

        data = {
          object_kind: 'build',

          ref: build.ref,
          tag: build.tag,
          before_sha: build.before_sha,
          sha: build.sha,

          # TODO: should this be not prefixed with build_?
          # Leaving this way to have backward compatibility
          build_id: build.id,
          build_name: build.name,
          build_stage: build.stage,
          build_status: build.status,
          build_started_at: build.started_at,
          build_finished_at: build.finished_at,
          build_duration: build.duration,
          build_allow_failure: build.allow_failure,

          # TODO: do we still need it?
          project_id: project.id,
          project_name: project.name_with_namespace,

          user: {
            id: user.try(:id),
            name: user.try(:name),
            email: user.try(:email),
          },

          commit: {
            id: commit.id,
            sha: commit.sha,
            message: commit.git_commit_message,
            author_name: commit.git_author_name,
            author_email: commit.git_author_email,
            status: commit.status,
            duration: commit.duration,
            started_at: commit.started_at,
            finished_at: commit.finished_at,
          },

          repository: {
            name: project.name,
            url: project.url_to_repo,
            description: project.description,
            homepage: project.web_url,
            git_http_url: project.http_url_to_repo,
            git_ssh_url: project.ssh_url_to_repo,
            visibility_level: project.visibility_level
          },
        }

        data
      end
    end
  end
end
