use std::sync::Arc;
use anyhow::Result;
use matc::{certmanager, clusters::codec::on_off, controller, transport};
#[tokio::main]
async fn main() -> Result<()> {
let fabric_id = 1000;
let controller_id = 100;
let device_id = 300;
let pin = 123456;
let cm = certmanager::FileCertManager::new(fabric_id, "./pem");
cm.bootstrap()?;
cm.create_user(controller_id)?;
let cm: Arc<dyn certmanager::CertManager> = certmanager::FileCertManager::load("./pem")?;
let transport = transport::Transport::new("0.0.0.0:5555").await?;
let controller = controller::Controller::new(&cm, &transport, fabric_id)?;
let connection = transport.create_connection("192.168.5.70:5540").await;
let connection = controller
.commission(&connection, pin, device_id, controller_id)
.await?;
on_off::on(&connection, 1).await?;
assert!(on_off::read_on_off(&connection, 1).await?);
on_off::off(&connection, 1).await?;
assert!(!on_off::read_on_off(&connection, 1).await?);
Ok(())
}