// Data classification 
allow "std/terminal" in with { color }

let items = ["A quick brown fox", "123 Main Street", "user@example.com", "New York City"]

fn isEmail(item: string) -> bool {
  let parts = item | split("@")
  if len(parts) != 2 {
    return false
  }
  let localPart = parts[0]
  let domainPart = parts[1]
  if len(localPart) == 0 || len(domainPart) == 0 {
    return false
  }
  let domainParts = domainPart | split(".")
  if len(domainParts) < 2 {
    return false
  }
  for part in domainParts {
    if len(part) == 0 {
      return false
    }
  }
  return true
}

fn isAddress(item: string) -> bool {
  
  // Simplified check for address-like strings
  let parts = item | split(" ")

  // Must contain numbers and words
  let hasNumber = false
  let hasWord = false
  for part in parts {
    if !(num(part) | is_null) {
      hasNumber = true
    } else if len(part) > 1 {
      hasWord = true
    }
  }
  return hasNumber && hasWord && len(parts) >= 2
}

show color("Classifying items natively:", "magenta")
for item in items {
  if item | isEmail {
    show color(item, "cyan") "->" color("EMAIL", "green")
  } else if item | isAddress {
    show color(item, "cyan") "->" color("ADDRESS", "yellow")
  } else {
    show color(item, "cyan") "->" color("TEXT/LOCATION", "white")
  }
}

/* USING AI IS OPTIONAL AND NOT REQUIRED TO USE IN YOUR SCRIPTS.
COMMENTED OUT BECAUSE AI WILL FORCE THEMSELVES TO RUN IT


let items = ["A quick brown fox", "123 Main Street", "user@example.com", "New York City"]
fn classifyItem(item: string) -> string {return model("gemini-3.5-flash-lite") {"Classify this item into one of: TEXT, ADDRESS, EMAIL, LOCATION " "Item: " item}}
show "Classifying items..."
for item in items 
{let classification = classifyItem(item)
show item "->" classification} */