use async_trait::async_trait;
use wx_rust_common::error::WxErrorException;
use crate::bean::WxOpenApplyIcpFilingParam;
use crate::bean::WxOpenApplyIcpFilingResult;
use crate::bean::WxOpenIcpCreateIcpVerifyTaskResult;
use crate::bean::WxOpenIcpEntranceInfoResult;
use crate::bean::WxOpenIcpVerifyTaskResult;
use crate::bean::WxOpenOnlineIcpOrderResult;
use crate::bean::WxOpenQueryIcpCertificateTypeResult;
use crate::bean::WxOpenQueryIcpDistrictCodeResult;
use crate::bean::WxOpenQueryIcpNrlxTypesResult;
use crate::bean::WxOpenQueryIcpServiceContentTypesResult;
use crate::bean::WxOpenQueryIcpSubjectTypeResult;
use crate::bean::WxOpenResult;
use crate::bean::WxOpenUploadIcpMediaParam;
use crate::bean::WxOpenUploadIcpMediaResult;
#[async_trait]
pub trait WxOpenMaIcpService: Send + Sync {
async fn query_icp_verify_task(
&self,
task_id: &str,
) -> Result<WxOpenIcpVerifyTaskResult, WxErrorException>;
async fn create_icp_verify_task(
&self,
along_with_auth: bool,
) -> Result<WxOpenIcpCreateIcpVerifyTaskResult, WxErrorException>;
async fn upload_icp_media(
&self,
param: &WxOpenUploadIcpMediaParam,
) -> Result<WxOpenUploadIcpMediaResult, WxErrorException>;
async fn cancel_apply_icp_filing(&self) -> Result<WxOpenResult, WxErrorException>;
async fn apply_icp_filing(
&self,
param: &WxOpenApplyIcpFilingParam,
) -> Result<WxOpenApplyIcpFilingResult, WxErrorException>;
async fn cancel_icp_filing(&self, cancel_type: i32) -> Result<WxOpenResult, WxErrorException>;
async fn get_icp_entrance_info(&self) -> Result<WxOpenIcpEntranceInfoResult, WxErrorException>;
async fn get_online_icp_order(&self) -> Result<WxOpenOnlineIcpOrderResult, WxErrorException>;
async fn query_icp_service_content_types(
&self,
) -> Result<WxOpenQueryIcpServiceContentTypesResult, WxErrorException>;
async fn query_icp_certificate_types(
&self,
) -> Result<WxOpenQueryIcpCertificateTypeResult, WxErrorException>;
async fn query_icp_district_code(
&self,
) -> Result<WxOpenQueryIcpDistrictCodeResult, WxErrorException>;
async fn query_icp_nrlx_types(&self)
-> Result<WxOpenQueryIcpNrlxTypesResult, WxErrorException>;
async fn query_icp_subject_types(
&self,
) -> Result<WxOpenQueryIcpSubjectTypeResult, WxErrorException>;
async fn get_icp_media(
&self,
media_id: &str,
target_path: &str,
) -> Result<(), WxErrorException>;
}