// 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"
	"io"
)

// ParseAIResume 简历信息解析接口, 支持PDF/DOCX/PNG/JPG四种文件类型的一次性的识别。
//
// 单租户限流: 10QPS, 同租户下的应用没有限流, 共享本租户的 10QPS 限流
//
// doc: https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/ai/document_ai-v1/resume/parse
func (r *AIService) ParseAIResume(ctx context.Context, request *ParseAIResumeReq, options ...MethodOptionFunc) (*ParseAIResumeResp, *Response, error) {
	if r.cli.mock.mockAIParseAIResume != nil {
		r.cli.Log(ctx, LogLevelDebug, "[lark] AI#ParseAIResume mock enable")
		return r.cli.mock.mockAIParseAIResume(ctx, request, options...)
	}

	req := &RawRequestReq{
		Scope:                 "AI",
		API:                   "ParseAIResume",
		Method:                "POST",
		URL:                   r.cli.openBaseURL + "/open-apis/document_ai/v1/resume/parse",
		Body:                  request,
		MethodOption:          newMethodOption(options),
		NeedTenantAccessToken: true,
		IsFile:                true,
	}
	resp := new(parseAIResumeResp)

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

// MockAIParseAIResume mock AIParseAIResume method
func (r *Mock) MockAIParseAIResume(f func(ctx context.Context, request *ParseAIResumeReq, options ...MethodOptionFunc) (*ParseAIResumeResp, *Response, error)) {
	r.mockAIParseAIResume = f
}

// UnMockAIParseAIResume un-mock AIParseAIResume method
func (r *Mock) UnMockAIParseAIResume() {
	r.mockAIParseAIResume = nil
}

// ParseAIResumeReq ...
type ParseAIResumeReq struct {
	File io.Reader `json:"file,omitempty"` // 简历文件, 支持 PDF / DOCX / PNG / JPG, 示例值: file binary
}

// ParseAIResumeResp ...
type ParseAIResumeResp struct {
	Resumes []*ParseAIResumeRespResume `json:"resumes,omitempty"` // 简历信息
}

// ParseAIResumeRespResume ...
type ParseAIResumeRespResume struct {
	FileMd5          string                                `json:"file_md5,omitempty"`          // 文件标识ID, 依据文件内容自动生成
	Content          string                                `json:"content,omitempty"`           // 文本内容, 当接口返回成功时, 该字段才存在
	NewContent       string                                `json:"new_content,omitempty"`       // 经过排序后的文本内容, 当接口返回成功时, 该字段才存在
	Name             string                                `json:"name,omitempty"`              // 名称
	Email            string                                `json:"email,omitempty"`             // 邮箱
	Mobile           string                                `json:"mobile,omitempty"`            // 手机号码
	MobileIsVirtual  bool                                  `json:"mobile_is_virtual,omitempty"` // 手机号码是否虚拟号码
	CountryCode      string                                `json:"country_code,omitempty"`      // 手机号码国家编码
	Educations       []*EHREducation                       `json:"educations,omitempty"`        // 教育经历
	Careers          []*ParseAIResumeRespResumeCareer      `json:"careers,omitempty"`           // 职业经历
	Projects         []*ParseAIResumeRespResumeProject     `json:"projects,omitempty"`          // 项目经历
	WorkYear         int64                                 `json:"work_year,omitempty"`         // 工作年限, 为空表示工作年限未知, 数字单位为年, 整数
	DateOfBirth      string                                `json:"date_of_birth,omitempty"`     // 生日, 格式YYYY-MM-DD
	Gender           int64                                 `json:"gender,omitempty"`            // 性别, 可选值有: 0: 未知, 1: 男性, 2: 女性
	WillingPositions []string                              `json:"willing_positions,omitempty"` // 希望获得的职位列表
	CurrentLocation  string                                `json:"current_location,omitempty"`  // 当前工作地点(城市)
	WillingLocations []string                              `json:"willing_locations,omitempty"` // 希望工作地点列表
	HomeLocation     string                                `json:"home_location,omitempty"`     // 家乡(城市)
	Languages        []*ParseAIResumeRespResumeLanguage    `json:"languages,omitempty"`         // 语言
	Awards           []*ParseAIResumeRespResumeAward       `json:"awards,omitempty"`            // 获奖
	Certificates     []*ParseAIResumeRespResumeCertificate `json:"certificates,omitempty"`      // 证书
	Competitions     []*ParseAIResumeRespResumeCompetition `json:"competitions,omitempty"`      // 竞赛
	SelfEvaluation   string                                `json:"self_evaluation,omitempty"`   // 自我评价
	URLs             []string                              `json:"urls,omitempty"`              // 链接列表
	SocialLinks      []string                              `json:"social_links,omitempty"`      // 社交链接
}

// ParseAIResumeRespResumeAward ...
type ParseAIResumeRespResumeAward struct {
	Award       string `json:"award,omitempty"`       // 奖项
	Date        string `json:"date,omitempty"`        // 获奖时间, 格式: YYYY
	Description string `json:"description,omitempty"` // 描述
}

// ParseAIResumeRespResumeCareer ...
type ParseAIResumeRespResumeCareer struct {
	Company        string `json:"company,omitempty"`         // 公司名称
	StartDate      string `json:"start_date,omitempty"`      // 开始时间, 格式: YYYY-MM-DD
	StartTime      string `json:"start_time,omitempty"`      // 始时间, 格式: YYYY-MM-DD, 跟start_date值一样
	EndDate        string `json:"end_date,omitempty"`        // 结束时间, 格式: YYYY-MM-DD
	EndTime        string `json:"end_time,omitempty"`        // 结束时间, 格式: YYYY-MM-DD 或 “至今”, 当值为“至今”时, end_date["", 值为其他时, end_date]end_time
	Title          string `json:"title,omitempty"`           // 职位
	Type           int64  `json:"type,omitempty"`            // 工作类型, 可选值有: 1: 实习, 2: 全职
	TypeStr        string `json:"type_str,omitempty"`        // 工作类型——'实习'、'全职'
	JobDescription string `json:"job_description,omitempty"` // 工作描述
}

// ParseAIResumeRespResumeCertificate ...
type ParseAIResumeRespResumeCertificate struct {
	Name string `json:"name,omitempty"` // 证书名称
	Desc string `json:"desc,omitempty"` // 描述
}

// ParseAIResumeRespResumeCompetition ...
type ParseAIResumeRespResumeCompetition struct {
	Name string `json:"name,omitempty"` // 竞赛名称
	Desc string `json:"desc,omitempty"` // 描述
}

// ParseAIResumeRespResumeLanguage ...
type ParseAIResumeRespResumeLanguage struct {
	Level       int64  `json:"level,omitempty"`       // 语言等级
	Description string `json:"description,omitempty"` // 语言描述
}

// ParseAIResumeRespResumeProject ...
type ParseAIResumeRespResumeProject struct {
	Name        string `json:"name,omitempty"`        // 项目名称
	Title       string `json:"title,omitempty"`       // 项目岗位
	StartDate   string `json:"start_date,omitempty"`  // 开始时间, 格式: YYYY-MM-DD
	StartTime   string `json:"start_time,omitempty"`  // 开始时间, 格式: YYYY-MM-DD, 跟start_date值一样
	EndDate     string `json:"end_date,omitempty"`    // 结束时间, 格式: YYYY-MM-DD
	EndTime     string `json:"end_time,omitempty"`    // 结束时间, 格式: YYYY-MM-DD 或 “至今”, 当值为“至今”时, end_date=="", 值
	Description string `json:"description,omitempty"` // 项目描述
}

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