import { Campaign } from './generators/campaign.js';
import { Serie } from './generators/serie.js';
import { Sazonal } from './generators/sazonal.js';
import { PackBlock } from './generators/pack.js';

export interface ProductLike {
  id: string;
  name: string;
  category?: string;
  description?: string;
  priceMin?: number;
  priceMax?: number;
  differentiator?: string;
  objective?: string;
}

export interface HtmlState {
  activeProfileId: string | null;
  products?: ProductLike[];
  briefing?: Record<string, unknown>;
  campaigns?: Campaign[];
  series?: Serie[];
  sazonais?: Sazonal[];
  packs?: PackBlock[];
  models?: { pack?: string; research?: string; [key: string]: string };
  apiKey?: string;
  [key: string]: unknown;
}

export function adaptHtmlStateToModules(htmlState: HtmlState): Record<string, unknown>;

export function runCampaignWithModule(
  htmlState: HtmlState,
  productId: string,
  objective: string
): Promise<Campaign>;

export function generateSerieWithModule(
  htmlState: HtmlState,
  productId: string,
  count?: number,
  format?: string
): Promise<Serie>;

export function generateSazonalWithModule(
  htmlState: HtmlState,
  productId: string,
  ocasiao: string,
  format?: string
): Promise<Sazonal>;

export function generateFormatPackWithModule(
  htmlState: HtmlState,
  productId: string,
  formatFilter?: string[] | null
): Promise<PackBlock[]>;

export function validateHtmlStateForGeneration(htmlState: HtmlState): {
  isValid: boolean;
  errors: string[];
};

export function findProductInState(
  htmlState: HtmlState,
  profileId: string,
  productId: string
): unknown;

export function estimateCampaignCost(): number;

export function estimateCost(type: string, count?: number): number;
