use async_trait::async_trait;

use super::Application;

#[async_trait]
pub trait OCICompliant: Application {
    async fn build_push_oci_image(&self) -> Result<String, String>; // TODO consider using oci-spec and friends crates here

    fn image_name(&self) -> String;

    fn local_image_name(&self) -> String;
}

#[async_trait]
pub trait HelmPackage: Application {
    /// Generates, packages, and pushes a Helm chart for the web application to an OCI registry.
    ///
    /// # Arguments
    /// * `image_url` - The full URL of the OCI container image to be used in the Deployment.
    async fn build_push_helm_package(&self, image_url: &str) -> Result<String, String>;
}
