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_ses::SendEmailResponse, rusoto_core::RusotoError<rusoto_ses::SendEmailError>> {
    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.clone(), rusoto_core::Region::EuWest1)
            .send_email(email)
            .await;
    debug!("result = {:?}", result);
    result
}