using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using Tiobon.Core.Common;
using Tiobon.Core.IServices.BASE;
using Tiobon.Core.Model;
using Tiobon.Core.Model.Models;
using Tiobon.Core.Model.ViewModels.Extend;

namespace Tiobon.Core.IServices;

/// <summary>
/// 个人简历(自定义服务接口)
/// </summary>	
public interface IGhrh_ResumeServices : IBaseServices<Ghrh_Resume, Ghrh_ResumeDto, InsertGhrh_ResumeInput, EditGhrh_ResumeInput>
{
    Task<ServiceResult<List<ResumeViewTab>>> QueryViewTab(int langId=1);

    Task<ServiceResult<List<ResumeCondition>>> QueryConditions();

    Task<ServiceResult> SwitchIsRecommend(List<long> ids, bool isRecommend);

    Task<bool> UpdateStatus(List<long> ids, string status);

    Task<bool> Recovery(List<long> ids);

    Task<bool> MarkTags(List<long> ids, List<long> tags);

    Task<ServiceResult<dynamic>> CheckIsExist(EditGhrh_ResumeInput input);

    Task<ServiceResult<Dictionary<string, string>>> QueryCompanyInfo(string companySpecCode, int langId);

    Task<ServiceResult<dynamic>> Query(long id, int langId);

    Task<ServiceResult> Submit(long id, string status, ResumeFormColumnSubmit resume);

    Task<ServiceResult<dynamic>> QueryResult(long id, int langId);

    Task<ServiceResult<string>> Export(QueryBody filter, string condition, bool? IsEnable = true);

    Task<ServiceResult> Recommend(ResumeRecommendForm recommend);

    Task<ServiceResult> RemindHasRecommend(List<long> id);

    Task<ServiceResult> SubscribeInterview(long id, ResumeSubscribeInterviewForm form);
    Task<ServiceResult> ScheduleInterview(long id, ResumeScheduleInterviewForm body);

    Task<ServiceResult> ModifyInterviewTime(long id, string time);

    Task<ServiceResult> RemindWaitInterview(List<long> ids);

    Task<ServiceResult> RescheduleInterview(long id, ResumeRescheduleInterviewForm input, string type);

    Task<ServiceResult> AssessInterview(long id, int status, List<Dictionary<string, object>> input, string source);

    Task<ServiceResult> ModifyInterviewer(long id, List<ResumeRecommendFormStaff> InterviewStaffs);

    Task<ServiceResult> TransferHasSendOffer(long id, long templateId, Dictionary<string, string> extFields);
    Task<ServiceResult> SendOffer(long id, long templateId, Dictionary<string, string> extFields);

    Task<ServiceResult> RemindHasOffer(List<long> ids);

    Task<ServiceResult> ModifyIsOffer(List<long> ids, bool isOffer);

    Task<ServicePageResult<Ghrh_ResumeDto>> QueryESS(QueryBody filter, string condition);

    Task<ServiceResult> Fail(ResumeFailInterviewForm input);

    Task<ServiceResult<ResumeScheduleInterviewResult>> QueryScheduleInterviewForm(long id);

    Task<ServiceResult> CancelInterview(long id, ResumeCancelInterviewForm input);

    Task<ServiceResult> ApplyOfferApproval(List<long> ids);

    Task<ServiceResult> OverTimeDeleteResume();
    Task<ServiceResult<string>> Download(List<long> ids);

    Task<ServiceResult<dynamic>> QueryAssessForm(long id, long? orderId = null, [FromBody] ResumeAssessForm assessForm = null);

    Task Shihua_OA_Sync();

    Task<ServiceResult<List<ResumeLog>>> Log(long id);

    Task<ServiceResult<string>> OfferDownLoad(long id, long templateId, Dictionary<string, string> extFields);


    Task<bool> SyncToStaff(long id);

    Task<ServiceResult<JArray>> QueryWorkstationInit(int langId  , string menuName);

    Task<ServiceResult<dynamic>> QueryWorkStationStatisticsChart(int langId = 1);

    Task<ServicePageResult<Ghrh_ResumeDto>> QueryHireList(QueryBody filter);

    Task<ServiceResult<ExcelData>> ExportHireExcel(QueryExport body);

    Task<ServiceResult> InterviewOrderOverTime();
}