/**
 * Opportunity Domain
 *
 * Exports all Opportunity-related contracts, schemas, helpers, and types.
 * Used for Salesforce Opportunity lifecycle management including cancellation.
 *
 * Key features:
 * - Service lifecycle tracking (Introduction -> Active -> Cancelling -> Cancelled)
 * - Cancellation deadline logic (25th of month rule)
 * - Rental equipment return tracking
 *
 * Types are derived from Zod schemas (Schema-First Approach)
 */

// ============================================================================
// Constants
// ============================================================================

export {
  // Stage constants (existing Salesforce picklist values)
  OPPORTUNITY_STAGE,
  type OpportunityStageValue,
  // Application stage constants
  APPLICATION_STAGE,
  type ApplicationStageValue,
  // Internet Cancellation notice constants
  CANCELLATION_NOTICE,
  type CancellationNoticeValue,
  // Line return status constants (Internet)
  LINE_RETURN_STATUS,
  type LineReturnStatusValue,
  // SIM Cancellation notice constants
  SIM_CANCELLATION_NOTICE,
  type SimCancellationNoticeValue,
  // Commodity type constants (existing Salesforce CommodityType field)
  COMMODITY_TYPE,
  type CommodityTypeValue,
  // Product type constants (simplified, derived from CommodityType)
  OPPORTUNITY_PRODUCT_TYPE,
  type OpportunityProductTypeValue,
  // Default commodity types for portal
  PORTAL_DEFAULT_COMMODITY_TYPES,
  // Commodity type helpers
  getCommodityTypeProductType,
  getDefaultCommodityType,
  // Source constants
  OPPORTUNITY_SOURCE,
  type OpportunitySourceValue,
  // Matching constants
  OPEN_OPPORTUNITY_STAGES,
  OPPORTUNITY_MATCH_STAGES_INTERNET_ELIGIBILITY,
  OPPORTUNITY_MATCH_STAGES_ORDER_PLACEMENT,
  CLOSED_OPPORTUNITY_STAGES,
  // Deadline constants
  CANCELLATION_DEADLINE_DAY,
  RENTAL_RETURN_DEADLINE_DAY,
  // Customer-facing service display types
  type CustomerServicePhase,
  type ServiceLinkStatus,
  type OrderTrackingInfo,
  type WhmcsServiceDetails,
  type CancellationDisplayInfo,
  type CustomerServiceView,
  // Customer-facing helpers
  getCustomerPhaseFromStage,
  getOrderTrackingSteps,
  canServiceBeCancelled,
} from "./contract.js";

// ============================================================================
// Contract Types (business types from contract.ts)
// ============================================================================

export type {
  InternetCancellationOpportunityData,
  SimCancellationOpportunityData,
} from "./contract.js";

// ============================================================================
// Schemas and Validated Types (preferred)
// ============================================================================

export {
  // Schemas
  opportunityRecordSchema,
  createOpportunityRequestSchema,
  updateOpportunityStageRequestSchema,
  cancellationFormDataSchema,
  cancellationOpportunityDataSchema,
  cancellationMonthOptionSchema,
  cancellationEligibilitySchema,
  cancellationStatusSchema,
  opportunityLookupCriteriaSchema,
  opportunityMatchResultSchema,
  opportunityResponseSchema,
  createOpportunityResponseSchema,
  cancellationPreviewResponseSchema,
  // Derived types (preferred - validated)
  type OpportunityRecord,
  type CreateOpportunityRequest,
  type UpdateOpportunityStageRequest,
  type CancellationFormData,
  type CancellationOpportunityData,
  type CancellationMonthOption,
  type CancellationEligibility,
  type CancellationStatus,
  type OpportunityLookupCriteria,
  type OpportunityMatchResult,
} from "./schema.js";
