## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  eval = FALSE
)

## ----setup--------------------------------------------------------------------
# library(bidux)
# # Optional tibble support
# if (requireNamespace("tibble", quietly = TRUE)) {
#   library(tibble)
# }

## ----data_story_recommended---------------------------------------------------
# # RECOMMENDED: Create a structured data story using the modern flat API
# story <- new_data_story(
#   hook = "Users struggle with complex form layouts leading to abandonment",
#   context = "User Interface Cognitive Load Analysis for complex form layouts with 40% improvement potential",
#   tension = "Current forms overwhelm users with cognitive load and lack clear guidance",
#   resolution = "Implement step-by-step form progression with visual progress indicators"
# )
# 
# # Enhanced print method
# print(story)
# 
# # Access story elements directly using the flat API
# story$hook
# story$context
# story$tension
# story$resolution
# 
# # Story is automatically structured for further BID framework usage

## ----data_story_deprecated, eval = FALSE--------------------------------------
# # DEPRECATED: Nested format (will be removed in 0.4.0)
# # This will trigger a deprecation warning
# story_old <- new_data_story(
#   context = "Dashboard usage analysis",
#   variables = list(
#     metric = "engagement",
#     trend = "declining"
#   ),
#   relationships = list(
#     correlation = "negative_with_complexity"
#   )
# )
# # Warning: Using deprecated nested format for data_story
# # The flat API is now recommended: new_data_story(hook, context, tension, resolution)
# # Nested format (variables, relationships) will be removed in bidux 0.4.0

## ----migration_old, eval = FALSE----------------------------------------------
# # OLD (deprecated)
# story <- new_data_story(
#   context = "Dashboard usage dropped",
#   variables = list(hook = "User engagement declining"),
#   relationships = list(resolution = "Analyze telemetry")
# )

## ----migration_new, eval = FALSE----------------------------------------------
# # NEW (recommended)
# story <- new_data_story(
#   hook = "User engagement declining",
#   context = "Dashboard usage dropped 30%",
#   tension = "Don't know if UX or user needs",
#   resolution = "Analyze telemetry"
# )

## ----interpret----------------------------------------------------------------
# # Basic interpretation with modern flat API (RECOMMENDED)
# result <- bid_interpret(
#   central_question = "How can we reduce cognitive load in our signup form?",
#   data_story = new_data_story(
#     hook = "Users abandon signup forms at 60% rate",
#     context = "Current form has 15 required fields",
#     tension = "Users feel overwhelmed and leave",
#     resolution = "Simplify form using progressive disclosure"
#   ),
#   quiet = FALSE
# )
# 
# # View results
# print(result)
# 
# # Enhanced interpretation with user personas
# interpretation <- bid_interpret(
#   central_question = "What drives user engagement in our dashboard?",
#   data_story = new_data_story(
#     hook = "Daily active users declining despite new features",
#     context = "Rich dashboard with multiple visualizations",
#     tension = "Users aren't discovering valuable insights",
#     resolution = "Guide attention to high-value content"
#   ),
#   user_personas = list(
#     list(
#       name = "Data Analyst",
#       goals = "Find patterns quickly",
#       pain_points = "Too many visualizations",
#       technical_level = "Advanced"
#     )
#   ),
#   quiet = TRUE
# )
# 
# # Enhanced S3 print method shows summary
# print(interpretation)

## ----structure----------------------------------------------------------------
# # Follow correct BID framework order: Interpret → Notice → Anticipate → Structure
# notice_result <- result |>
#   bid_notice(
#     problem = "Users struggle with cognitive overload in signup forms",
#     evidence = "60% abandonment rate and user feedback surveys",
#     quiet = TRUE
#   )
# 
# # Anticipate potential user interactions and biases
# anticipate_result <- notice_result |>
#   bid_anticipate(
#     interaction_modes = list(
#       primary = "Progressive form completion",
#       fallback = "Quick signup option"
#     ),
#     quiet = TRUE
#   )
# 
# # Structure creates actionable dashboard recommendations
# structured <- bid_structure(
#   previous_stage = anticipate_result,
#   concepts = c("Progressive Disclosure", "Cognitive Load Theory"),
#   quiet = TRUE
# )
# 
# # View auto-selected layout and concept-grouped suggestions
# print(paste("Auto-selected layout:", structured$layout))
# print("Structured recommendations:")
# print(structured$suggestions)
# 
# # Summary provides overview of all recommendations
# summary(structured)

## ----workflow-----------------------------------------------------------------
# # Step 1: Interpret user needs and context (using RECOMMENDED flat API)
# ui_analysis <- bid_interpret(
#   central_question = "How can we improve landing page conversion without damaging user trust?",
#   data_story = new_data_story(
#     hook = "High-pressure sales tactics may be reducing user trust",
#     context = "Landing page with multiple persuasive elements",
#     tension = "Need conversions but not at expense of user experience",
#     resolution = "Balance persuasion with trust-building elements"
#   ),
#   user_personas = list(
#     list(
#       name = "Potential Customer",
#       goals = "Evaluate product value",
#       pain_points = "Feels pressured by aggressive sales tactics",
#       technical_level = "Basic"
#     )
#   ),
#   quiet = TRUE
# )
# 
# # Step 2: Notice specific problems
# problem_analysis <- ui_analysis |>
#   bid_notice(
#     problem = "Aggressive persuasion tactics creating user pressure",
#     evidence = "Lower conversion rates and negative user feedback on pressure tactics",
#     quiet = TRUE
#   )
# 
# # Step 3: Anticipate user interactions and cognitive biases
# interaction_analysis <- problem_analysis |>
#   bid_anticipate(
#     interaction_modes = list(
#       primary = "Trust-based evaluation of product value",
#       secondary = "Quick decision under time pressure"
#     ),
#     quiet = TRUE
#   )
# 
# # Step 4: Structure actionable recommendations
# recommendations <- bid_structure(
#   previous_stage = interaction_analysis,
#   concepts = c("Social Proof", "Trust Signals", "Progressive Disclosure"),
#   quiet = TRUE
# )
# 
# # Step 5: Validate design decisions
# validation_analysis <- bid_validate(
#   previous_stage = recommendations,
#   validation_method = "expert_review",
#   quiet = TRUE
# )
# 
# # Step 6: Create comprehensive data story from complete workflow using flat API
# optimization_story <- new_data_story(
#   hook = "High-pressure persuasive elements creating user trust concerns",
#   context = "Complete BID Framework Analysis: Landing Page Trust-Based Conversion Optimization across all 5 stages",
#   tension = "Need to balance conversion goals with user trust - current approach damages long-term relationships",
#   resolution = "Apply validated BID framework recommendations balancing persuasion with trust-building, monitoring both conversion rates and user trust metrics"
# )
# 
# # View complete analysis results
# print("=== Complete BID Framework Workflow Results ===")
# print(optimization_story)
# print("\n=== Stage Summaries ===")
# summary(recommendations)
# summary(validation_analysis)

## ----validation, error = TRUE-------------------------------------------------
try({
# # Clear error messages for invalid inputs
# try(bid_interpret()) # Missing required parameter
# try(bid_interpret(central_question = 123)) # Wrong type for central_question
# try(bid_interpret(central_question = "test", data_story = "invalid")) # Invalid data_story
# 
# # Descriptive validation errors for data story creation (flat API)
# try(new_data_story()) # Missing required parameter (context)
# try(new_data_story(context = "")) # Invalid empty context
# 
# # Deprecated format still validates (but triggers warnings)
# try(new_data_story(
#   context = "Valid context",
#   variables = "invalid_type"  # Must be a list
# ))
})

## ----deprecation_warning, eval = FALSE----------------------------------------
# # Using deprecated nested format triggers warning
# story <- new_data_story(
#   context = "Dashboard analysis",
#   variables = list(metric = "engagement"),
#   relationships = list(trend = "declining")
# )
# # Warning message:
# # ! Using deprecated nested format for data_story
# # ℹ The flat API is now recommended: new_data_story(hook, context, tension, resolution)
# # ℹ Nested format (variables, relationships) will be removed in bidux 0.4.0

## ----telemetry_presets--------------------------------------------------------
# # Three sensitivity levels available:
# # - "strict": Detects even minor issues (for critical apps or new dashboards)
# # - "moderate": Balanced default (appropriate for most applications)
# # - "relaxed": Only detects major issues (for mature, stable dashboards)
# 
# # Get strict sensitivity thresholds
# strict_thresholds <- bid_telemetry_presets("strict")
# print(strict_thresholds)
# 
# # Get moderate sensitivity (default)
# moderate_thresholds <- bid_telemetry_presets("moderate")
# 
# # Get relaxed sensitivity
# relaxed_thresholds <- bid_telemetry_presets("relaxed")

## ----telemetry_usage, eval = FALSE--------------------------------------------
# # Use strict preset for critical application
# issues <- bid_ingest_telemetry(
#   "telemetry.sqlite",
#   thresholds = bid_telemetry_presets("strict")
# )
# 
# # Use relaxed preset for mature dashboard
# issues <- bid_ingest_telemetry(
#   "telemetry.sqlite",
#   thresholds = bid_telemetry_presets("relaxed")
# )
# 
# # Override specific thresholds while using a preset as base
# custom_thresholds <- bid_telemetry_presets("moderate")
# custom_thresholds$unused_input_threshold <- 0.03  # More sensitive to unused inputs
# issues <- bid_ingest_telemetry("telemetry.sqlite", thresholds = custom_thresholds)

## ----tibble-------------------------------------------------------------------
# # Check if tibble is available
# if (requireNamespace("tibble", quietly = TRUE)) {
#   # BID framework functions return tibbles by default when available
#   # Using RECOMMENDED flat API
#   result_tbl <- bid_interpret(
#     central_question = "How can we test tibble integration?",
#     data_story = new_data_story(
#       hook = "Package supports modern tibble output",
#       context = "Enhanced data handling with tibble package",
#       tension = "Need to verify integration works correctly",
#       resolution = "Test and validate tibble functionality"
#     ),
#     quiet = TRUE
#   )
# 
#   cat("Result class:", class(result_tbl), "\n")
# 
#   # Works seamlessly with dplyr if available
#   if (requireNamespace("dplyr", quietly = TRUE)) {
#     library(dplyr)
# 
#     # Filter and analyze BID framework results
#     interpret_summary <- result_tbl %>%
#       select(stage, central_question, hook) %>%
#       filter(!is.na(central_question))
# 
#     print(interpret_summary)
#   }
# } else {
#   cat("Tibble package not available, using base data.frame\n")
# }

## ----consistency--------------------------------------------------------------
# # Consistent parameter patterns across functions
# bid_interpret_params <- c("text", "method", "context", "return_tibble", "quiet")
# bid_structure_params <- c("insights", "format", "priority", "context", "return_tibble", "quiet")
# 
# # Common parameters:
# # - return_tibble: Enable modern tibble output
# # - quiet: Control informational messages
# # - context: Provide analysis context
# 
# # All functions return objects with:
# # - S3 classes for proper method dispatch
# # - Timestamp columns for tracking
# # - Consistent attribute structures
# # - Modern data types (tibble when available)

## ----backward_compatibility, eval = FALSE-------------------------------------
# # Legacy nested format still works (with deprecation warning)
# old_style_story <- new_data_story(
#   context = "Dashboard analysis",
#   variables = list(metric = "engagement"),
#   relationships = list(trend = "declining")
# )
# # Triggers deprecation warning but functions correctly
# 
# # Modern flat API is recommended
# new_style_story <- new_data_story(
#   hook = "Engagement metrics show concerning trends",
#   context = "Dashboard analysis of Q3 2024 usage patterns",
#   tension = "User engagement declining despite new features",
#   resolution = "Implement BID framework to identify UX friction"
# )
# 
# # Both can be used with bid_interpret()
# result_old <- bid_interpret(
#   central_question = "How to improve engagement?",
#   data_story = old_style_story,
#   quiet = TRUE
# )
# 
# result_new <- bid_interpret(
#   central_question = "How to improve engagement?",
#   data_story = new_style_story,
#   quiet = TRUE
# )
# 
# # Both return compatible structures
# identical(names(result_old), names(result_new))

## ----migration_strategy, eval = FALSE-----------------------------------------
# # Step 1: Identify all new_data_story() calls with variables/relationships
# # Step 2: Extract nested values and flatten
# 
# # OLD CODE
# story <- new_data_story(
#   context = "User study results",
#   variables = list(
#     hook = "Users struggle with feature discovery",
#     metric = "task_completion_rate",
#     value = 0.42
#   ),
#   relationships = list(
#     resolution = "Redesign navigation with progressive disclosure"
#   )
# )
# 
# # NEW CODE (flattened)
# story <- new_data_story(
#   hook = "Users struggle with feature discovery",
#   context = "User study results: 42% task completion rate",
#   tension = "Low discoverability preventing user success",
#   resolution = "Redesign navigation with progressive disclosure",
#   # Optional metadata for extra fields
#   metric = "task_completion_rate",
#   value = 0.42
# )

