use ampersand::{ opamp::* };
use async_trait::async_trait;
use std::sync::Arc;

struct WebsocketClient {

}

#[async_trait]
impl Client for WebsocketClient {

    async fn start(&mut self, ctx: &mut Context<'_>, settings: ConnectionSettings) -> Result<(), OpAMPClientError> {
        todo!()
    }
    async fn stop(&mut self, ctx: &mut Context<'_>) -> Result<(), OpAMPClientError> {
        todo!()
    }
    fn agent_description(&self) -> Arc<AgentDescription> {
        todo!()
    }
    async fn set_agent_description( &mut self, descr: AgentDescription,) -> Result<(), OpAMPClientError> {
        todo!();
    }
    async fn set_health(&mut self, health: AgentHealth) -> Result<(), OpAMPClientError> {
        todo!()
    }
    async fn update_effective_config( &mut self, ctx: &mut Context<'_>,) -> Result<(), OpAMPClientError> {
        todo!()
    }
    async fn set_remote_config_status( &mut self, status: RemoteConfigStatus,) -> Result<(), OpAMPClientError> {
        todo!()
    }
    async fn set_package_statuses( &mut self, statuses: PackageStatuses,) -> Result<(), OpAMPClientError> {
        todo!()
    }
}

#[test]
fn type_test() {

    // Connect with a websocket with ConnectionSettings
    let opampcli: &dyn ampersand::opamp::Client = &WebsocketClient{};

    // Set a dummy description

    assert_ne!(std::mem::size_of::<ampersand::opamp::AgentConfigFile>(), 0);
}