1→import Foundation 2→import SwiftUI 3→ 4→// MARK: - Lead Type 5→enum LeadType: String, Codable, CaseIterable { 6→ case direct = "Cliente Direto" 7→ case connector = "Conector" 8→ 9→ var color: Color { 10→ switch self { 11→ case .direct: return .blue 12→ case .connector: return .purple 13→ } 14→ } 15→ 16→ var icon: String { 17→ switch self { 18→ case .direct: return "person.fill" 19→ case .connector: return "person.2.circle.fill" 20→ } 21→ } 22→ 23→ var description: String { 24→ switch self { 25→ case .direct: return "Cliente final que paga diretamente" 26→ case .connector: return "Parceiro que traz clientes (modelo Luiz)" 27→ } 28→ } 29→} 30→ 31→// MARK: - Lead Status 32→enum LeadStatus: String, Codable, CaseIterable { 33→ case contacted = "Contatado" 34→ case proposal = "Proposta" 35→ case negotiating = "Negociando" 36→ case closed = "Fechado" 37→ case lost = "Perdido" 38→ 39→ var color: Color { 40→ switch self { 41→ case .contacted: return .blue 42→ case .proposal: return .orange 43→ case .negotiating: return .purple 44→ case .closed: return .green 45→ case .lost: return .gray 46→ } 47→ } 48→ 49→ var icon: String { 50→ switch self { 51→ case .contacted: return "bubble.left.fill" 52→ case .proposal: return "doc.text.fill" 53→ case .negotiating: return "arrow.left.arrow.right" 54→ case .closed: return "checkmark.circle.fill" 55→ case .lost: return "xmark.circle.fill" 56→ } 57→ } 58→} 59→ 60→// MARK: - Lead Model 61→struct Lead: Identifiable, Codable, Hashable { 62→ var id: UUID = UUID() 63→ var name: String 64→ var service: String 65→ var value: Double 66→ var status: LeadStatus 67→ var type: LeadType = .direct 68→ var notes: String? 69→ var createdAt: Date = Date() 70→ var updatedAt: Date = Date() 71→ var contactInfo: String? 72→ var source: String? 73→ // Connector-specific fields 74→ var potentialMonthlyValue: Double? // For connectors: potential recurring value 75→ var connectedClients: [String]? // Names of clients they can bring 76→ 77→ init(name: String, service: String, value: Double, status: LeadStatus = .contacted, type: LeadType = .direct, notes: String? = nil, contactInfo: String? = nil, source: String? = nil, potentialMonthlyValue: Double? = nil, connectedClients: [String]? = nil) { 78→ self.name = name 79→ self.service = service 80→ self.value = value 81→ self.status = status 82→ self.type = type 83→ self.notes = notes 84→ self.contactInfo = contactInfo 85→ self.source = source 86→ self.potentialMonthlyValue = potentialMonthlyValue 87→ self.connectedClients = connectedClients 88→ } 89→} 90→ 91→// MARK: - Income Task Model 92→struct IncomeTask: Identifiable, Codable { 93→ var id: UUID = UUID() 94→ var title: String 95→ var subtitle: String? 96→ var isCompleted: Bool = false 97→ var completedAt: Date? 98→ var tag: String? 99→ var tagColor: String = "blue" 100→ var isDaily: Bool = false 101→ var aiTip: String? 102→ var createdAt: Date = Date() 103→ 104→ var tagSwiftUIColor: Color { 105→ switch tagColor { 106→ case "red": return .red 107→ case "green": return .green 108→ case "blue": return .blue 109→ case "orange": return .orange 110→ case "purple": return .purple 111→ case "pink": return .pink 112→ case "yellow": return .yellow 113→ default: return .blue 114→ } 115→ } 116→ 117→ init(title: String, subtitle: String? = nil, tag: String? = nil, tagColor: String = "blue", isDaily: Bool = false, aiTip: String? = nil) { 118→ self.title = title 119→ self.subtitle = subtitle 120→ self.tag = tag 121→ self.tagColor = tagColor 122→ self.isDaily = isDaily 123→ self.aiTip = aiTip 124→ } 125→} 126→ 127→// MARK: - Income Goal Model 128→struct IncomeGoal: Codable { 129→ var targetAmount: Double 130→ var deadline: Date 131→ var description: String 132→ 133→ static var `default`: IncomeGoal { 134→ IncomeGoal( 135→ targetAmount: 10000, 136→ deadline: Calendar.current.date(from: DateComponents(year: 2026, month: 1, day: 6)) ?? Date(), 137→ description: "Meta de renda ate o Santander compensar" 138→ ) 139→ } 140→} 141→ 142→// MARK: - AI Task Helper 143→struct AITaskHelper { 144→ static func getTipForTask(_ task: IncomeTask) -> String { 145→ switch task.tag?.lowercased() { 146→ case "prioritario": 147→ return "Foque em contatos que ja demonstraram interesse ou clientes anteriores. Taxa de conversao e maior!" 148→ case "marketing": 149→ return "Posts com cases de sucesso e resultados geram mais engajamento. Inclua numeros e metricas." 150→ case "vendas": 151→ return "Personalize cada mensagem. Mencione algo especifico sobre a pessoa ou empresa." 152→ default: 153→ return "Complete esta tarefa para avancar em direcao a sua meta!" 154→ } 155→ } 156→ 157→ static func getProspectingScript(for leadType: String) -> String { 158→ switch leadType.lowercased() { 159→ case "cliente antigo": 160→ return """ 161→ Oi [Nome]! Feliz Natal! 162→ 163→ Lembrei de voce porque estou com disponibilidade essa semana para projetos urgentes. 164→ 165→ Aquele [projeto/ideia] que conversamos ainda faz sentido? Posso fazer uma condicao especial de fim de ano. 166→ 167→ Abraco! 168→ """ 169→ case "contato frio": 170→ return """ 171→ Oi [Nome]! Vi que voce trabalha com [area]. 172→ 173→ Sou desenvolvedor iOS/Web especializado em automacao com IA. Estou com disponibilidade para projetos de curto prazo. 174→ 175→ Posso ajudar com algo? Tenho condicoes especiais ate sexta. 176→ """ 177→ case "linkedin": 178→ return """ 179→ Disponivel para projetos de curto prazo! 180→ 181→ Estou com agenda aberta essa semana e na primeira semana de janeiro para projetos de: 182→ 183→ -> Desenvolvimento iOS/macOS (SwiftUI) 184→ -> Dashboards e Landing Pages interativas 185→ -> Automacao com IA (Claude, ChatGPT, LM Studio) 186→ -> Consultoria tecnica e Code Review 187→ 188→ Se voce ou sua empresa precisa de um projeto entregue rapido, me chama no inbox! 189→ 190→ #iOS #SwiftUI #DesenvolvimentoWeb #IA #Freelancer 191→ """ 192→ default: 193→ return """ 194→ Oi! Sou desenvolvedor fullstack especializado em iOS, Web e automacao com IA. 195→ 196→ Estou com disponibilidade para projetos de curto prazo com condicoes especiais. 197→ 198→ Posso ajudar com algo? 199→ """ 200→ } 201→ } 202→ 203→ static func getNextStepSuggestion(for lead: Lead) -> String { 204→ switch lead.status { 205→ case .contacted: 206→ return "Envie uma proposta detalhada com escopo, prazo e valor. Destaque seu diferencial!" 207→ case .proposal: 208→ return "Faca follow-up em 2-3 dias. Pergunte se ha duvidas e ofereca uma call rapida." 209→ case .negotiating: 210→ return "Busque entender objecoes. Ofereça opcoes de pagamento ou ajuste de escopo se necessario." 211→ case .closed: 212→ return "Parabens! Documente o projeto e peca depoimento ao final para portfolio." 213→ case .lost: 214→ return "Analise o motivo da perda. Mantenha contato para oportunidades futuras." 215→ } 216→ } 217→} 218→ Whenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.