// Copyright 2018 Drone.IO Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package github

type webhook struct {
	Ref     string `json:"ref"`
	Action  string `json:"action"`
	Deleted bool   `json:"deleted"`
	BaseRef string `json:"base_ref"`

	Head struct {
		ID        string `json:"id"`
		URL       string `json:"url"`
		Message   string `json:"message"`
		Timestamp string `json:"timestamp"`

		Author struct {
			Name     string `json:"name"`
			Email    string `json:"email"`
			Username string `json:"username"`
		} `json:"author"`

		Committer struct {
			Name     string `json:"name"`
			Email    string `json:"email"`
			Username string `json:"username"`
		} `json:"committer"`

		Added    []string `json:"added"`
		Removed  []string `json:"removed"`
		Modified []string `json:"modified"`
	} `json:"head_commit"`

	Sender struct {
		Login  string `json:"login"`
		Avatar string `json:"avatar_url"`
	} `json:"sender"`

	// repository details
	Repo struct {
		Owner struct {
			Login string `json:"login"`
			Name  string `json:"name"`
		} `json:"owner"`

		Name          string `json:"name"`
		FullName      string `json:"full_name"`
		Language      string `json:"language"`
		Private       bool   `json:"private"`
		HTMLURL       string `json:"html_url"`
		CloneURL      string `json:"clone_url"`
		DefaultBranch string `json:"default_branch"`
	} `json:"repository"`

	// deployment hook details
	Deployment struct {
		ID   int64  `json:"id"`
		Sha  string `json:"sha"`
		Ref  string `json:"ref"`
		Task string `json:"task"`
		Env  string `json:"environment"`
		URL  string `json:"url"`
		Desc string `json:"description"`
	} `json:"deployment"`

	// pull request details
	PullRequest struct {
		Number  int    `json:"number"`
		State   string `json:"state"`
		Title   string `json:"title"`
		HTMLURL string `json:"html_url"`

		User struct {
			Login  string `json:"login"`
			Avatar string `json:"avatar_url"`
		} `json:"user"`

		Base struct {
			Ref string `json:"ref"`
		} `json:"base"`

		Head struct {
			SHA  string `json:"sha"`
			Ref  string `json:"ref"`
			Repo struct {
				CloneURL string `json:"clone_url"`
			} `json:"repo"`
		} `json:"head"`
	} `json:"pull_request"`
}
