package structures

// The GitOrgsRepoResponse type contains various fields related to a Git repository, including
// information about the owner, name, description, permissions, and more.
// @property {int} ID - The unique identifier for the repository.
// @property Owner - An object containing information about the owner of the repository, including
// their ID, login, full name, email, avatar URL, language, admin status, last login time, creation
// time, and various other details.
// @property {string} Name - The name of the repository.
// @property {string} FullName - The full name of the repository, including the owner's username or
// organization name.
// @property {string} Description - A struct that represents the response from the GitHub API when
// retrieving information about a repository belonging to an organization. It contains various
// properties such as the repository ID, owner information, name, description, size, language, number
// of stars, forks, watchers, open issues, and more.
// @property {bool} Empty - a boolean value indicating whether the repository is empty or not.
// @property {bool} Private - A boolean value indicating whether the repository is private or not.
// @property {bool} Fork - A boolean value indicating whether the repository is a fork of another
// repository.
// @property {bool} Template - A boolean value indicating whether the repository is a template
// repository or not. If it is a template repository, it can be used as a starting point for creating
// new repositories with the same structure and content.
// @property Parent - This property represents the parent repository of a forked repository. If the
// repository is not a fork, this property will be null.
// @property {bool} Mirror - A boolean value indicating whether the repository is a mirror or not. A
// mirror repository is a read-only copy of another repository that is automatically kept in sync with
// the original repository.
// @property {int} Size - The size of the repository in bytes.
// @property {string} Language - The primary programming language used in the repository.
// @property {string} LanguagesURL - The URL to retrieve the languages used in the repository.
// @property {string} HTMLURL - The URL of the repository on the web.
// @property {string} SSHURL - The SSH URL of the repository. This is the URL that can be used to clone
// the repository using the SSH protocol.
// @property {string} CloneURL - The URL that can be used to clone the repository.
// @property {string} OriginalURL - The original URL of the repository before it was mirrored.
// @property {string} Website - The website associated with the repository.
// @property {int} StarsCount - The number of stars (or likes) that the repository has received on
// GitHub.
// @property {int} ForksCount - The number of times this repository has been forked.
// @property {int} WatchersCount - The number of users who have starred or are watching the repository.
// @property {int} OpenIssuesCount - The number of open issues in the repository.
// @property {int} OpenPrCounter - The number of open pull requests for the repository.
// @property {int} ReleaseCounter - The number of releases for the repository.
// @property {string} DefaultBranch - The default branch of the repository.
// @property {bool} Archived - A boolean value indicating whether the repository has been archived or
// not.
// @property {string} CreatedAt - The date and time when the repository was created.
// @property {string} UpdatedAt - The date and time when the repository was last updated.
// @property Permissions - This property contains information about the permissions granted to users or
// teams for the repository. It includes three boolean values: admin, push, and pull. Admin grants full
// control over the repository, push allows users to push changes to the repository, and pull allows
// users to pull changes from the repository.
// @property {bool} HasIssues - a boolean value indicating whether the repository has issues enabled
// @property InternalTracker - This property contains information about the internal issue tracker for
// the repository, including whether the time tracker is enabled, whether only contributors can track
// time, and whether issue dependencies are enabled.
// @property {bool} HasWiki - A boolean value indicating whether the repository has a wiki.
// @property {bool} HasPullRequests - A boolean value indicating whether the repository has pull
// requests enabled or not.
// @property {bool} HasProjects - A boolean value indicating whether the repository has GitHub Projects
// enabled.
// @property {bool} IgnoreWhitespaceConflicts - A boolean value indicating whether or not whitespace
// conflicts should be ignored in the repository. This can be useful when merging code that has
// differences in whitespace formatting.
// @property {bool} AllowMergeCommits - A boolean value indicating whether merge commits are allowed in
// the repository.
// @property {bool} AllowRebase - A boolean value indicating whether or not rebase is allowed for this
// repository.
// @property {bool} AllowRebaseExplicit - A boolean value indicating whether explicit rebasing is
// allowed in the repository.
// @property {bool} AllowSquashMerge - A boolean value indicating whether or not squash merging is
// allowed for pull requests in the repository. Squash merging is a way to merge changes from a branch
// into another branch by condensing all the commits into a single commit.
// @property {string} DefaultMergeStyle - The default merge style for pull requests in the repository.
// It can be one of three values: "merge", "rebase", or "squash".
// @property {string} AvatarURL - The URL of the avatar for the owner of the repository.
// @property {bool} Internal - A boolean value indicating whether the repository is internal or not. An
// internal repository is only visible to members of the organization that owns it.
// @property {string} MirrorInterval - The interval at which the repository is mirrored (if it is a
// mirror).
// @property {string} MirrorUpdated - The date and time when the repository was last updated as a
// mirrored repository.
// @property RepoTransfer - This property is of type interface{} and represents the transfer of
// ownership of the repository. It can be null if there is no transfer in progress.
type GitOrgsRepoResponse struct {
	ID    int `json:"id"`
	Owner struct {
		ID                int    `json:"id"`
		Login             string `json:"login"`
		FullName          string `json:"full_name"`
		Email             string `json:"email"`
		AvatarURL         string `json:"avatar_url"`
		Language          string `json:"language"`
		IsAdmin           bool   `json:"is_admin"`
		LastLogin         string `json:"last_login"`
		Created           string `json:"created"`
		Restricted        bool   `json:"restricted"`
		Active            bool   `json:"active"`
		ProhibitLogin     bool   `json:"prohibit_login"`
		Location          string `json:"location"`
		Website           string `json:"website"`
		Description       string `json:"description"`
		Visibility        string `json:"visibility"`
		FollowersCount    int    `json:"followers_count"`
		FollowingCount    int    `json:"following_count"`
		StarredReposCount int    `json:"starred_repos_count"`
		Username          string `json:"username"`
	} `json:"owner"`
	Name            string      `json:"name"`
	FullName        string      `json:"full_name"`
	Description     string      `json:"description"`
	Empty           bool        `json:"empty"`
	Private         bool        `json:"private"`
	Fork            bool        `json:"fork"`
	Template        bool        `json:"template"`
	Parent          interface{} `json:"parent"`
	Mirror          bool        `json:"mirror"`
	Size            int         `json:"size"`
	Language        string      `json:"language"`
	LanguagesURL    string      `json:"languages_url"`
	HTMLURL         string      `json:"html_url"`
	SSHURL          string      `json:"ssh_url"`
	CloneURL        string      `json:"clone_url"`
	OriginalURL     string      `json:"original_url"`
	Website         string      `json:"website"`
	StarsCount      int         `json:"stars_count"`
	ForksCount      int         `json:"forks_count"`
	WatchersCount   int         `json:"watchers_count"`
	OpenIssuesCount int         `json:"open_issues_count"`
	OpenPrCounter   int         `json:"open_pr_counter"`
	ReleaseCounter  int         `json:"release_counter"`
	DefaultBranch   string      `json:"default_branch"`
	Archived        bool        `json:"archived"`
	CreatedAt       string      `json:"created_at"`
	UpdatedAt       string      `json:"updated_at"`
	Permissions     struct {
		Admin bool `json:"admin"`
		Push  bool `json:"push"`
		Pull  bool `json:"pull"`
	} `json:"permissions"`
	HasIssues       bool `json:"has_issues"`
	InternalTracker struct {
		EnableTimeTracker                bool `json:"enable_time_tracker"`
		AllowOnlyContributorsToTrackTime bool `json:"allow_only_contributors_to_track_time"`
		EnableIssueDependencies          bool `json:"enable_issue_dependencies"`
	} `json:"internal_tracker"`
	HasWiki                   bool        `json:"has_wiki"`
	HasPullRequests           bool        `json:"has_pull_requests"`
	HasProjects               bool        `json:"has_projects"`
	IgnoreWhitespaceConflicts bool        `json:"ignore_whitespace_conflicts"`
	AllowMergeCommits         bool        `json:"allow_merge_commits"`
	AllowRebase               bool        `json:"allow_rebase"`
	AllowRebaseExplicit       bool        `json:"allow_rebase_explicit"`
	AllowSquashMerge          bool        `json:"allow_squash_merge"`
	DefaultMergeStyle         string      `json:"default_merge_style"`
	AvatarURL                 string      `json:"avatar_url"`
	Internal                  bool        `json:"internal"`
	MirrorInterval            string      `json:"mirror_interval"`
	MirrorUpdated             string      `json:"mirror_updated"`
	RepoTransfer              interface{} `json:"repo_transfer"`
}
