use crate::nats_types::ValidateSubmissionRequest;

#[allow(dead_code)]
#[derive(Debug)]
pub enum Error{
	ApiActionSubmissionValidate(submissions_api::Error),
}
impl std::fmt::Display for Error{
	fn fmt(&self,f:&mut std::fmt::Formatter<'_>)->std::fmt::Result{
		write!(f,"{self:?}")
	}
}
impl std::error::Error for Error{}

impl crate::message_handler::MessageHandler{
	pub async fn validate_submission(&self,validate_info:ValidateSubmissionRequest)->Result<(),Error>{
		let submission_id=validate_info.SubmissionID;
		let validate_result=self.validate_inner(validate_info.into()).await;

		// update the submission depending on the result
		match &validate_result{
			Ok(())=>{
				// update the submission model status to validated
				self.api.action_submission_validated(
					submissions_api::types::SubmissionID(submission_id)
				).await.map_err(Error::ApiActionSubmissionValidate)?;
			},
			Err(e)=>{
				// update the submission model status to accepted
				self.api.action_submission_accepted(submissions_api::types::ActionSubmissionAcceptedRequest{
					SubmissionID:submission_id,
					StatusMessage:format!("{e}"),
				}).await.map_err(Error::ApiActionSubmissionValidate)?;
			},
		}

		Ok(())
	}
}