TitleOptimizerModels.swift 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import Foundation
  2. enum TitleOptimizerTab: String, CaseIterable, Identifiable {
  3. case optimize
  4. case compare
  5. case preview
  6. var id: String { rawValue }
  7. var title: String {
  8. switch self {
  9. case .optimize: "Optimize"
  10. case .compare: "Compare"
  11. case .preview: "Preview"
  12. }
  13. }
  14. }
  15. enum TitleGoal: String, CaseIterable, Identifiable {
  16. case curiosity
  17. case question
  18. case listicle
  19. case emotional
  20. case direct
  21. case provocative
  22. var id: String { rawValue }
  23. var title: String {
  24. switch self {
  25. case .curiosity: "Curiosity"
  26. case .question: "Question"
  27. case .listicle: "Listicle"
  28. case .emotional: "Emotional"
  29. case .direct: "Direct"
  30. case .provocative: "Bold"
  31. }
  32. }
  33. var subtitle: String {
  34. switch self {
  35. case .curiosity: "Create intrigue"
  36. case .question: "Ask the community"
  37. case .listicle: "Numbers & lists"
  38. case .emotional: "Personal & relatable"
  39. case .direct: "Clear & concise"
  40. case .provocative: "Spark debate"
  41. }
  42. }
  43. }
  44. enum TitleVariantCount: Int, CaseIterable, Identifiable {
  45. case three = 3
  46. case five = 5
  47. case eight = 8
  48. var id: Int { rawValue }
  49. var label: String { "\(rawValue) titles" }
  50. }
  51. struct TitleDraft: Equatable {
  52. var subreddit: String = ""
  53. var topic: String = ""
  54. var tone: PostTone = .casual
  55. var titleGoal: TitleGoal = .curiosity
  56. var originalTitle: String = ""
  57. var postType: RedditPostType = .text
  58. var isNSFW: Bool = false
  59. var isSpoiler: Bool = false
  60. var isOC: Bool = false
  61. var flair: String = ""
  62. var variantCount: TitleVariantCount = .five
  63. }
  64. struct TitleVariant: Identifiable, Equatable {
  65. let id: UUID
  66. var title: String
  67. var score: Int
  68. var reasoning: String
  69. init(id: UUID = UUID(), title: String, score: Int, reasoning: String) {
  70. self.id = id
  71. self.title = title
  72. self.score = score
  73. self.reasoning = reasoning
  74. }
  75. }
  76. struct TitleAnalysis: Equatable {
  77. var overallScore: Int
  78. var lengthScore: Int
  79. var engagementScore: Int
  80. var clarityScore: Int
  81. var suggestions: [String]
  82. }
  83. struct TitleOptimizationResult: Equatable {
  84. var analysis: TitleAnalysis
  85. var variants: [TitleVariant]
  86. }