use alloc::borrow::ToOwned;
use alloc::string::String;
use core::ops::Deref;
use daemonic_error::GlassParadox;
use crate::{Annotation, DaemonicEmission, DaemonicError, Glass, ObservationTier, Severity, Temporal, TopologySegment};
use crate::daemonic::observation::obs_states::Opaque;
use super::super::super::glass_flags::GlassFlags;
#[derive(Clone, Debug)]
pub struct Paradox<GLASS> {
position: &'static TopologySegment,
severity: Severity,
tier: ObservationTier,
annotation: Annotation,
temporal: Temporal,
absolute_payload: GLASS,
asserted_payload: Option<GLASS>,
flags: GlassFlags,
}
impl<GLASS> Paradox<GLASS> {
pub fn new(absolute_payload: GLASS, asserted_payload: Option<GLASS>, position: &'static TopologySegment,
) -> Self {
Paradox {
position,
severity: Severity::Paradox,
tier: ObservationTier::Composed,
annotation: Annotation::None,
temporal: Temporal::Current,
absolute_payload,
asserted_payload,
flags: GlassFlags::paradox_defaults(),
}
}
pub fn extract_flags(&self) -> GlassFlags { self.flags.clone() }
pub fn contradiction(
actual: GLASS,
expected: GLASS,
position: &'static TopologySegment,
annotation: Annotation,
flags: Option<GlassFlags>,
) -> Self {
Paradox {
position,
severity: Severity::Paradox,
tier: ObservationTier::Composed,
annotation,
temporal: Temporal::Current,
absolute_payload: actual,
asserted_payload: Some(expected),
flags: (if flags.is_some() { flags.unwrap() } else { GlassFlags::paradox_defaults() }),
}
}
pub fn should_not_exist(
exists: GLASS,
position: &'static TopologySegment,
annotation: Annotation,
flags: Option<GlassFlags>,
) -> Self {
Paradox {
position,
severity: Severity::Paradox,
tier: ObservationTier::Composed,
annotation,
temporal: Temporal::Current,
absolute_payload: exists,
asserted_payload: None,
flags: (if flags.is_some() { flags.unwrap() } else { GlassFlags::paradox_defaults() }),
}
}
pub fn actual(&self) -> &GLASS {
&self.absolute_payload
}
pub fn expected(&self) -> Option<&GLASS> {
self.asserted_payload.as_ref()
}
pub fn is_existence_paradox(&self) -> bool {
self.asserted_payload.is_none()
}
pub fn classification_inputs(&self) -> ParadoxInputs<GLASS> {
todo!(" This code is not working like i fucking want it to and im done fucking with it for now \
Dated: 2026-09-21 \
Time Spent: 4 hours \
Comments:FUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUCK")
}
pub fn extract_position(&self) -> &'static TopologySegment {
self.position
}
pub fn extract_position_label(&self) -> &str {
self.position.label
}
pub fn extract_tier(&self) -> ObservationTier {
self.tier
}
pub fn extract_annotation(&self) -> Annotation {
self.annotation.clone()
}
pub fn extract_temporal(&self) -> Temporal {
self.temporal
}
pub fn extract_absolute_payload(&self) -> &GLASS {
&self.absolute_payload
}
pub fn query_asserted_payload(&self) -> Option<&GLASS> {
self.extract_referent_asserted_payload()
}
pub fn extract_severity(&self) -> Severity {
self.severity
}
pub fn with_note(mut self, note: impl Into<String>) -> Self {
self.annotation = Annotation::Note(note.into());
self
}
pub fn with_suggestion(mut self, suggestion: impl Into<String>) -> Self {
self.annotation = Annotation::Suggestion(suggestion.into());
self
}
pub fn with_help(mut self, help: impl Into<String>) -> Self {
self.annotation = Annotation::Suggestion(help.into());
self
}
pub fn mutate_annotation(&mut self, a: Annotation) {
self.annotation = a;
}
pub fn mutate_tier(mut self, tier: impl Into<ObservationTier>) -> Self {
self.tier = tier.into();
self
}
pub fn extract_referent_absolute_payload(&self) -> &GLASS {
&self.absolute_payload
}
pub fn extract_owned_absolute_payload(self) -> GLASS {
self.absolute_payload
}
pub fn extract_referent_asserted_payload(&self) -> Option<&GLASS> {
self.asserted_payload.as_ref()
}
pub fn extract_owned_asserted_payload(self) -> Option<GLASS> {
self.asserted_payload
}
}
struct ParadoxInputs<GLASS> {
actual: GLASS,
expected: Option<GLASS>,
annotation: Annotation,
}
impl<GLASS: Glass<Paradox<GLASS>> + Glass<GLASS>> GlassParadox<GLASS> for Paradox<GLASS>
where
GLASS: for<'error> DaemonicError<'error>,
{
fn observations(&self) -> &[GLASS] {
todo!()
}
fn contradiction_description(&self) -> &str {
todo!()
}
fn collapse(self, chosen_index: usize) -> Option<GLASS> {
todo!()
}
fn should_continue(&self) -> bool { false }
}
impl<GLASS> DaemonicError<'_> for Paradox<GLASS>
where
GLASS: for<'error> DaemonicError<'error>,
{
fn emit(self) -> DaemonicEmission {
todo!()
}
fn position(&self) -> &TopologySegment {
self.extract_position()
}
}
impl<GLASS> Glass<GLASS> for Paradox<GLASS> {
type Anchor = TopologySegment;
fn position(&self) -> &TopologySegment {
self.extract_position()
}
fn severity(&self) -> Severity {
self.extract_severity()
}
fn payload(&self) -> Option<&GLASS> {
Some(self.extract_referent_absolute_payload())
}
fn into_payload(self) -> Option<GLASS>
where
Self: Sized,
GLASS: Sized,
{
Some(self.extract_owned_absolute_payload())
}
}