File size: 3,033 Bytes
5ca475a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// This file is intentionally left blank as the types from the previous version are no longer needed.
// New types will be defined locally within components where they are used.
export interface MixedStyle {
  name: string;
  percentage: number;
}

export interface RegionalityData {
  country: string;

  city: string;
  neighborhood: string;
  weight: number;
}

export interface BrandData {
  name: string;
  slogan: string;
  weight: number; // Percentage of influence
}

export type TextPosition = 'center' | 'top' | 'bottom' | 'left' | 'right' | 'top-right';
export type SubtitleOutlineStyle = 'auto' | 'white' | 'black' | 'soft_shadow' | 'transparent_box';

// Renamed and enhanced for new styling capabilities
export interface CompositionPreset {
  id: string;
  name: string;
  icon: React.FC<React.SVGProps<SVGSVGElement>>;
  config: {
    style: {
        name: 'fill' | 'stroke' | 'fill-stroke' | 'gradient-on-block' | 'vertical';
        palette: 'light' | 'dark' | 'complementary' | 'analogous';
        background?: {
            color: string; // e.g., 'rgba(0,0,0,0.5)'
            padding: number; // as a factor of font size
        };
        forcedStroke?: string;
    };
    rotation: boolean;
    subtitle: boolean;
  };
}

// --- Price Tag Types ---
export type PriceTagPosition = 'none' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
export type PriceTagStyleId = 'circle' | 'tag' | 'burst';
export type PriceTagColor = 'red' | 'yellow' | 'blue' | 'black';

export interface PriceData {
  text: string;
  modelText: string;
  style: PriceTagStyleId;
  position: PriceTagPosition;
  color: PriceTagColor;
}


// --- Marketing Suite Types ---

export interface GoogleAd {
  headlines: string[];
  descriptions: string[];
}
export interface FacebookAd {
  primaryText: string;
  headline: string;
  description: string;
}
export interface AdCopy {
  google: GoogleAd;
  facebook: FacebookAd;
  strategyTip: string;
}

export interface AdIdea {
  conceptName: string;
  headline: string;
  primaryText: string;
  replicabilityTip: string;
}

export interface AdTrendAnalysis {
    trendOverview: string;
    adIdeas: AdIdea[];
    hashtags: string[];
}

export interface BrandConcept {
    name: string;
    philosophy: string;
    visualStyle: string;
    keywords: string[];
}

export interface FeatureDetails {
    title: string;
    description: string;
}

// Interface to consolidate all generation parameters into a single object
export interface GenerateOptions {
    basePrompt: string;
    imagePrompt: string;
    textOverlay: string;
    compositionId: string;
    textPosition: TextPosition;
    subtitleOutline: SubtitleOutlineStyle;
    artStyles: string[];
    theme: string;
    brandData: BrandData;
    priceData: PriceData;
    negativeImagePrompt?: string;
    numberOfImages: number;
    scenario?: 'product' | 'couple' | 'family' | 'isometric_details' | 'poster' | 'carousel_cta' | 'carousel_educational' | 'carousel_trend' | 'executive_project';
    concept?: BrandConcept;
}