import os
import re
import uuid

from flask import session


def _sanitize_sales_key(value: str) -> str:
    normalized = re.sub(r"[^a-z0-9]+", "-", (value or "").lower()).strip("-")
    return normalized or "anonymous"


def _display_name_from_email(email: str | None) -> str:
    if not email or email == "_":
        return "Guest"
    local_part = email.split("@", 1)[0]
    cleaned = re.sub(r"[^a-zA-Z0-9]+", " ", local_part).strip()
    return cleaned.title() if cleaned else email


def get_sales_workspace_identity() -> tuple[str, str]:
    user_type = session.get("user_type")
    user_value = session.get("user") or ""

    if user_type == "authenticated" and user_value:
        owner_key = f"user-{_sanitize_sales_key(user_value)}"
        owner_label = user_value
    elif user_type == "guest":
        guest_token = session.get("sales_guest_token")
        if not guest_token:
            guest_token = uuid.uuid4().hex[:10]
            session["sales_guest_token"] = guest_token
        owner_key = f"guest-{guest_token}"
        owner_label = f"Guest workspace {guest_token[:6]}"
    else:
        anon_token = session.get("sales_anon_token")
        if not anon_token:
            anon_token = uuid.uuid4().hex[:10]
            session["sales_anon_token"] = anon_token
        owner_key = f"anon-{anon_token}"
        owner_label = f"Session {anon_token[:6]}"

    session["project_owner_key"] = owner_key
    session["sales_tenant_id"] = owner_key
    session["sales_workspace_label"] = owner_label
    return owner_key, owner_label


def get_sales_stack() -> dict:
    """Minimal stack for blueprints that still reference get_sales_stack."""
    import extensions as ext
    tenant_id, workspace_label = get_sales_workspace_identity()
    return {
        "tenant_id": tenant_id,
        "workspace_label": workspace_label,
        "sap_api_service": ext.sap_api_service,
        "repo": None,
    }