use crate::Config;
use rusoto_core;
use rusoto_ses;
use tracing::*;

pub const A_STYLE: cuach::PreEscaped<&'static str> =
    cuach::PreEscaped("color:#007bff;text-decoration:none;");
pub const CONTENT_STYLE: cuach::PreEscaped<&'static str> =
    cuach::PreEscaped("padding:1em;max-width:600px;margin:0 auto;");
pub const FOOTER_STYLE: cuach::PreEscaped<&'static str> =
    cuach::PreEscaped("max-width:600px;margin:10px auto;font-size: small; color: #666666;");
pub const BLOCKQUOTE_STYLE: cuach::PreEscaped<&'static str> =
    cuach::PreEscaped("border-left:2px solid #666666;padding-left:10px;margin:30px 0 30px 30px;");

pub async fn send_email(
    config: &Config,
    subject: String,
    body: rusoto_ses::Body,
    address: String,
) -> Result<(), rusoto_core::RusotoError<rusoto_ses::SendEmailError>> {
    if let Some(config_email) = config.email.clone() {
        let subject = rusoto_ses::Content {
            data: subject,
            charset: Some("utf-8".to_string()),
        };
        debug!("sending an email to {:?}", address);
        let client = rusoto_core::request::HttpClient::new().unwrap();
        let email = rusoto_ses::SendEmailRequest {
            message: rusoto_ses::Message { body, subject },
            source: config.email_source.clone(),
            destination: rusoto_ses::Destination {
                to_addresses: Some(vec![address]),
                ..rusoto_ses::Destination::default()
            },
            ..rusoto_ses::SendEmailRequest::default()
        };
        use rusoto_ses::Ses;
        let result =
            rusoto_ses::SesClient::new_with(client, config_email, config.aws_ses_zone.clone())
                .send_email(email)
                .await?;
        debug!("result = {:?}", result);
        Ok(())
    } else {
        Ok(())
    }
}