// Code generated by lark_sdk_gen. DO NOT EDIT.
/**
 * Copyright 2022 chyroc
 *
 * 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 lark

import (
	"context"
)

// GetHireApplication 根据投递 ID 获取单个投递信息。
//
// doc: https://open.feishu.cn/document/ukTMukTMukTM/uMzM1YjLzMTN24yMzUjN/hire-v1/application/get
// new doc: https://open.feishu.cn/document/server-docs/hire-v1/candidate-management/delivery-process-management/application/get
func (r *HireService) GetHireApplication(ctx context.Context, request *GetHireApplicationReq, options ...MethodOptionFunc) (*GetHireApplicationResp, *Response, error) {
	if r.cli.mock.mockHireGetHireApplication != nil {
		r.cli.Log(ctx, LogLevelDebug, "[lark] Hire#GetHireApplication mock enable")
		return r.cli.mock.mockHireGetHireApplication(ctx, request, options...)
	}

	req := &RawRequestReq{
		Scope:                 "Hire",
		API:                   "GetHireApplication",
		Method:                "GET",
		URL:                   r.cli.openBaseURL + "/open-apis/hire/v1/applications/:application_id",
		Body:                  request,
		MethodOption:          newMethodOption(options),
		NeedTenantAccessToken: true,
	}
	resp := new(getHireApplicationResp)

	response, err := r.cli.RawRequest(ctx, req, resp)
	return resp.Data, response, err
}

// MockHireGetHireApplication mock HireGetHireApplication method
func (r *Mock) MockHireGetHireApplication(f func(ctx context.Context, request *GetHireApplicationReq, options ...MethodOptionFunc) (*GetHireApplicationResp, *Response, error)) {
	r.mockHireGetHireApplication = f
}

// UnMockHireGetHireApplication un-mock HireGetHireApplication method
func (r *Mock) UnMockHireGetHireApplication() {
	r.mockHireGetHireApplication = nil
}

// GetHireApplicationReq ...
type GetHireApplicationReq struct {
	ApplicationID string   `path:"application_id" json:"-"` // 投递 ID, 示例值: "6949805467799537964"
	UserIDType    *IDType  `query:"user_id_type" json:"-"`  // 用户 ID 类型, 示例值: open_id, 可选值有: open_id: 标识一个用户在某个应用中的身份。同一个用户在不同应用中的 Open ID 不同。[了解更多: 如何获取 Open ID](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-openid), union_id: 标识一个用户在某个应用开发商下的身份。同一用户在同一开发商下的应用中的 Union ID 是相同的, 在不同开发商下的应用中的 Union ID 是不同的。通过 Union ID, 应用开发商可以把同个用户在多个应用中的身份关联起来。[了解更多: 如何获取 Union ID？](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-union-id), user_id: 标识一个用户在某个租户内的身份。同一个用户在租户 A 和租户 B 内的 User ID 是不同的。在同一个租户内, 一个用户的 User ID 在所有应用（包括商店应用）中都保持一致。User ID 主要用于在不同的应用间打通用户数据。[了解更多: 如何获取 User ID？](https://open.feishu.cn/document/uAjLw4CM/ugTN1YjL4UTN24CO1UjN/trouble-shooting/how-to-obtain-user-id), 默认值: `open_id`, 当值为 `user_id`, 字段权限要求: 获取用户 user ID
	Options       []string `query:"options" json:"-"`       // 请求控制参数, 用于控制接口响应逻辑。如需一次查询多个用户ID, 可通过将同一参数名多次传递, 并且每次传递不同的参数值。例如: https://{url}?options={option1}&options={option2}, 示例值: get_latest_application_on_chain, 可选值有: get_latest_application_on_chain: 仅对当前投递是虚拟职位投递时生效, 若投递未分配, 虚拟职位投递即为最新投递, 返回请求中指定的虚拟职位投递的信息, 若投递已分配, 会返回分配链上最新一个实体职位投递的信息, 而非请求中指定的投递。
}

// GetHireApplicationResp ...
type GetHireApplicationResp struct {
	Application *GetHireApplicationRespApplication `json:"application,omitempty"` // 投递数据
}

// GetHireApplicationRespApplication ...
type GetHireApplicationRespApplication struct {
	ID                           string                                                       `json:"id,omitempty"`                              // 投递id
	JobID                        string                                                       `json:"job_id,omitempty"`                          // 投递的职位 ID
	TalentID                     string                                                       `json:"talent_id,omitempty"`                       // 候选人 ID
	ResumeSourceID               string                                                       `json:"resume_source_id,omitempty"`                // 简历来源 ID
	Stage                        *GetHireApplicationRespApplicationStage                      `json:"stage,omitempty"`                           // 投递处于的阶段
	ActiveStatus                 int64                                                        `json:"active_status,omitempty"`                   // 活跃状态, 可选值有: 1: 活跃, 2: 非活跃, 即为「已终止」
	DeliveryType                 int64                                                        `json:"delivery_type,omitempty"`                   // 投递方式, 详细枚举请参考[「枚举常量介绍」](https://open.larkoffice.com/document/server-docs/hire-v1/enum) - 投递方式枚举定义, 可选值有: 1: HR寻访, 2: 候选人主动投递
	ResumeSourceInfo             *GetHireApplicationRespApplicationResumeSourceInfo           `json:"resume_source_info,omitempty"`              // 投递来源信息
	WebsiteResumeSource          *GetHireApplicationRespApplicationWebsiteResumeSource        `json:"website_resume_source,omitempty"`           // 官网投递来源
	TalentAttachmentResumeID     string                                                       `json:"talent_attachment_resume_id,omitempty"`     // 简历附件 ID
	CreateTime                   string                                                       `json:"create_time,omitempty"`                     // 创建时间
	ModifyTime                   string                                                       `json:"modify_time,omitempty"`                     // 修改时间
	StageTimeList                []*GetHireApplicationRespApplicationStageTime                `json:"stage_time_list,omitempty"`                 // 阶段变更时间列表
	TerminationType              int64                                                        `json:"termination_type,omitempty"`                // 终止原因的类型, 可选值有: 1: 我们拒绝了候选人, 22: 候选人拒绝了我们, 27: 其他
	TerminationReasonList        []string                                                     `json:"termination_reason_list,omitempty"`         // 终止的具体原因的id列表
	TerminationReasonNote        string                                                       `json:"termination_reason_note,omitempty"`         // 终止备注
	ApplicationPreferredCityList []*GetHireApplicationRespApplicationApplicationPreferredCity `json:"application_preferred_city_list,omitempty"` // 意向投递城市列表
	CreatorID                    string                                                       `json:"creator_id,omitempty"`                      // 投递创建人 ID, 仅当投递创建人为企业内部员工时可获取（如员工手动上传简历 / 加入职位 / 内推）, 其余情况返回为空（如候选人主动投递）
}

// GetHireApplicationRespApplicationApplicationPreferredCity ...
type GetHireApplicationRespApplicationApplicationPreferredCity struct {
	Code string                                                         `json:"code,omitempty"` // 编码
	Name *GetHireApplicationRespApplicationApplicationPreferredCityName `json:"name,omitempty"` // 名称
}

// GetHireApplicationRespApplicationApplicationPreferredCityName ...
type GetHireApplicationRespApplicationApplicationPreferredCityName struct {
	ZhCn string `json:"zh_cn,omitempty"` // 中文
	EnUs string `json:"en_us,omitempty"` // 英文
}

// GetHireApplicationRespApplicationResumeSourceInfo ...
type GetHireApplicationRespApplicationResumeSourceInfo struct {
	ID               string                                                 `json:"id,omitempty"`                 // 投递来源 ID
	Name             *GetHireApplicationRespApplicationResumeSourceInfoName `json:"name,omitempty"`               // 投递来源名称
	ResumeSourceType int64                                                  `json:"resume_source_type,omitempty"` // 投递来源类型, 可选值有: 10000: 内推, 10001: 猎头, 10002: 内部来源, 10003: 第三方招聘网站, 10004: 社交媒体, 10005: 线下来源, 10006: 其他, 10007: 外部推荐, 10008: 员工转岗, 10009: 实习生转正
}

// GetHireApplicationRespApplicationResumeSourceInfoName ...
type GetHireApplicationRespApplicationResumeSourceInfoName struct {
	ZhCn string `json:"zh_cn,omitempty"` // 中文
	EnUs string `json:"en_us,omitempty"` // 英文
}

// GetHireApplicationRespApplicationStage ...
type GetHireApplicationRespApplicationStage struct {
	ID     string `json:"id,omitempty"`      // 阶段 ID
	ZhName string `json:"zh_name,omitempty"` // 阶段中文名字
	EnName string `json:"en_name,omitempty"` // 英文名
	Type   int64  `json:"type,omitempty"`    // 阶段类型, 可选值有: 1: 筛选型, 2: 评估型, 3: 笔试型, 4: 面试型, 5: Offer型, 6: 待入职, 7: 已入职, 8: 其它类型, 255: 系统默认
}

// GetHireApplicationRespApplicationStageTime ...
type GetHireApplicationRespApplicationStageTime struct {
	StageID   string `json:"stage_id,omitempty"`   // 阶段 ID
	EnterTime string `json:"enter_time,omitempty"` // 最近一次进入该阶段的时间
	ExitTime  string `json:"exit_time,omitempty"`  // 最后一次离开时间, 如当前在该阶段, 则为空
}

// GetHireApplicationRespApplicationWebsiteResumeSource ...
type GetHireApplicationRespApplicationWebsiteResumeSource struct {
	WebsiteID   string                                                           `json:"website_id,omitempty"`   // 官网站点 ID
	WebsiteName *GetHireApplicationRespApplicationWebsiteResumeSourceWebsiteName `json:"website_name,omitempty"` // 官网站点名称
	Channel     *GetHireApplicationRespApplicationWebsiteResumeSourceChannel     `json:"channel,omitempty"`      // 推广渠道来源
}

// GetHireApplicationRespApplicationWebsiteResumeSourceChannel ...
type GetHireApplicationRespApplicationWebsiteResumeSourceChannel struct {
	ChannelID   string                                                                  `json:"channel_id,omitempty"`   // 官网推广渠道 ID
	ChannelName *GetHireApplicationRespApplicationWebsiteResumeSourceChannelChannelName `json:"channel_name,omitempty"` // 官网推广渠道名称
}

// GetHireApplicationRespApplicationWebsiteResumeSourceChannelChannelName ...
type GetHireApplicationRespApplicationWebsiteResumeSourceChannelChannelName struct {
	ZhCn string `json:"zh_cn,omitempty"` // 中文
	EnUs string `json:"en_us,omitempty"` // 英文
}

// GetHireApplicationRespApplicationWebsiteResumeSourceWebsiteName ...
type GetHireApplicationRespApplicationWebsiteResumeSourceWebsiteName struct {
	ZhCn string `json:"zh_cn,omitempty"` // 中文
	EnUs string `json:"en_us,omitempty"` // 英文
}

// getHireApplicationResp ...
type getHireApplicationResp struct {
	Code  int64                   `json:"code,omitempty"` // 错误码, 非 0 表示失败
	Msg   string                  `json:"msg,omitempty"`  // 错误描述
	Data  *GetHireApplicationResp `json:"data,omitempty"`
	Error *ErrorDetail            `json:"error,omitempty"`
}
