// Package git_hook...
//
// Description : git_hook...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2021-11-11 6:23 下午
package git_hook

// HookData hook通知数据
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 6:23 下午 2021/11/11
type HookData struct {
	Repository Repository `json:"repository"` // 仓库信息
	Sender     User       `json:"sender"`
	Ref        string     `json:"ref"`         // 分支,如 : refs/heads/master
	Before     string     `json:"before"`      // 之前版本号 : e162757f3f4a37786b4118a5346baae5dd24ecde
	After      string     `json:"after"`       // 当前版本号 : c70a362d850a820704bd374363ea4e7ea810fd1a
	HeadCommit Commit     `json:"head_commit"` // 最近一次提交
	CompareUrl string     `json:"compare_url"` // 两个版本号代码diff的URL, 点击后可查看diff
	Commits    []Commit   `json:"commits"`     // 提交记录列表
	Pusher     User       `json:"pusher"`      // 推送人信息
}

// Repository 仓库信息
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 6:24 下午 2021/11/11
type Repository struct {
	Mirror                    bool                      `json:"mirror"`
	OriginalUrl               string                    `json:"original_url"`                // original_url
	StarsCount                int64                     `json:"stars_count"`                 // start 数量
	IgnoreWhitespaceConflicts bool                      `json:"ignore_whitespace_conflicts"` // 忽略空格的冲突
	FullName                  string                    `json:"full_name"`                   // 仓库完整名称
	Fork                      bool                      `json:"fork"`                        // 是否 fork
	CreatedAt                 string                    `json:"created_at"`                  // 创建时间
	Internal                  bool                      `json:"internal"`                    // 是否内部仓库
	AllowRebaseExplicit       bool                      `json:"allow_rebase_explicit"`       // 是否允许rebase
	MirrorInterval            string                    `json:"mirror_interval"`             // mirror_interval
	CloneUrl                  string                    `json:"clone_url"`                   // gi clone 对用的 https 地址
	WatchersCount             int64                     `json:"watchers_count"`              // 监听器数量
	OpenIssuesCount           int64                     `json:"open_issues_count"`           // 未解决的issues数量
	ReleaseCounter            int64                     `json:"release_counter"`             // 发布版本数量
	InternalTracker           RepositoryInternalTracker `json:"internal_tracker"`            // 内部跟踪配置
	Name                      string                    `json:"name"`                        // 仓库名称
	Empty                     bool                      `json:"empty"`                       // 仓库是否为空
	SshUrl                    string                    `json:"ssh_url"`                     // git clone 对应的  ssh 地址
	ForksCount                int64                     `json:"forks_count"`                 // fork 次数
	Permissions               RepositoryPermission      `json:"permissions"`                 // 权限配置
	Private                   bool                      `json:"private"`                     // 是否为私有仓库
	Size                      int64                     `json:"size"`                        // 仓库大小 KB
	HasWiki                   bool                      `json:"has_wiki"`                    // 是否有 wiki
	HasProjects               bool                      `json:"has_projects"`                // 是否有项目
	AllowMergeCommits         bool                      `json:"allow_merge_commits"`         // 是否允许合并提交
	AvatarUrl                 string                    `json:"avatar_url"`                  // 头像地址
	ID                        int64                     `json:"id"`                          // 仓库ID
	Description               string                    `json:"description"`                 // 创建仓库时候的描述
	Website                   string                    `json:"website"`                     // 网站
	UpdatedAt                 string                    `json:"updated_at"`                  // 更新时间
	HasPullRequests           bool                      `json:"has_pull_requests"`           // 是否有 pull request
	Parent                    map[string]interface{}    `json:"parent"`                      // parent
	OpenPrCounter             int64                     `json:"open_pr_counter"`             // 打开的pr数量
	HasIssues                 bool                      `json:"has_issues"`                  // 是否有issues
	AllowRebase               bool                      `json:"allow_rebase"`                // 是否允许rebase
	AllowSquashMerge          bool                      `json:"allow_squash_merge"`          // 是否允许 合并 merge (将分支内容合并成一次提交, 合入主干)
	Owner                     User                      `json:"owner"`                       // 仓库所有者信息
	Template                  bool                      `json:"template"`                    // 是否是模版
	HtmlUrl                   string                    `json:"html_url"`                    // 访问仓库的html地址
	DefaultBranch             string                    `json:"default_branch"`              // 默认分支
	Archived                  bool                      `json:"archived"`                    // 是否已归档
	DefaultMergeStyle         string                    `json:"default_merge_style"`         // 默认的合并方式
}

// RepositoryInternalTracker 内部跟踪器
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 6:28 下午 2021/11/11
type RepositoryInternalTracker struct {
	EnableTimeTracker                bool `json:"enable_time_tracker"`                   // 启用time_tracker
	AllowOnlyContributorsToTrackTime bool `json:"allow_only_contributors_to_track_time"` // 仅有代码贡献者允许
	EnableIssueDependencies          bool `json:"enable_issue_dependencies"`             // 启用 issue_dependencies
}

// RepositoryPermission 仓库权限
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 6:29 下午 2021/11/11
type RepositoryPermission struct {
	Pull  bool `json:"pull"`  // 是否允许 pull 代码
	Admin bool `json:"admin"` // 是否是管理员
	Push  bool `json:"push"`  // 是否允许push代码
}

// User 用户信息
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 6:30 下午 2021/11/11
type User struct {
	IsAdmin           bool   `json:"is_admin"`            // 是否是管理员
	Website           string `json:"website"`             // 网页
	Email             string `json:"email"`               // 邮箱
	AvatarUrl         string `json:"avatar_url"`          // 头像
	ProhibitLogin     bool   `json:"prohibit_login"`      // 禁止登录
	Description       string `json:"description"`         // 描述
	FollowingCount    int64  `json:"following_count"`     // follower数量
	StarredReposCount int64  `json:"starred_repos_count"` // star仓库数量
	Username          string `json:"username"`            // 用户名
	Login             string `json:"login"`               // 登录
	Created           string `json:"created"`             // 创建时间
	Visibility        string `json:"visibility"`          // 是否可见
	FullName          string `json:"full_name"`           // 全名
	LastLogin         string `json:"last_login"`          // 最近登录时间
	Restricted        bool   `json:"restricted"`          // 是否受限
	Active            bool   `json:"active"`              // 是否活跃
	Location          string `json:"location"`            // 位置
	FollowersCount    int64  `json:"followers_count"`     // follower数量
	ID                int64  `json:"id"`                  // id
	Language          string `json:"language"`            // 语言
}

// Commit 提交记录信息
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 6:25 下午 2021/11/11
type Commit struct {
	Message      string                 `json:"message"`      // 提交时带的message
	Url          string                 `json:"url"`          // 浏览此版本代码的地址
	Author       CommitAuthor           `json:"author"`       // 作者信息
	Verification map[string]interface{} `json:"verification"` // 验证
	Timestamp    string                 `json:"timestamp"`    // 时间
	ID           string                 `json:"id"`           // 提交的版本号 98ccd35d19d17c8e624a492cc5811fe6f381ca09
	Committer    CommitAuthor           `json:"committer"`    // 提交人信息
	Added        []string               `json:"added"`        // 增加的文件列表
	Removed      []string               `json:"removed"`      // 移除文件列表
	Modified     []string               `json:"modified"`     // 修改的文件列表
}

// CommitAuthor 提交人的信息
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 6:31 下午 2021/11/11
type CommitAuthor struct {
	Name     string `json:"name"`     // 昵称
	Email    string `json:"email"`    // 邮箱
	Username string `json:"username"` // 用户名
}

// ResponseData 处理结果的返回值
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 11:37 上午 2021/11/12
type ResponseData struct {
	Code    interface{} `json:"code"`
	Message string      `json:"message"`
	Data    interface{} `json:"data"`
}