package com.example.data.local.entity import androidx.room.Entity import androidx.room.PrimaryKey @Entity(tableName = "consumer_accounts") data class ConsumerAccountEntity( @PrimaryKey val id: String = "primary_account", val businessName: String = "DEWA Gram Udhyog Pvt Ltd", val businessLogoUrl: String = "", val mobileNumber: String = "+919461321162", val email: String = "contact@sdadigital.in", val gstNumber: String = "06AAJCD0975H1ZK", val address: String = "Gali No 4, Uttam Nagar Loharu Road, Bhiwani 127021 HR", val metaWabaId: String = "1378746380406848", val metaPhoneNumberId: String = "913349665192073", val metaAccessTokenMasked: String = "EAAl6rWdth7YBSvrGsUqF53H26vetTv1BmfGssD9wZAFW9XkTcJIawKkKEdJDD6GSgqKhGlfOceMiZCR4ilLtszYanJhMRZBdrj9fyXcZAzvMHupNGD5VEyzAgwSs649OBBtYSLp5HVFU4no0ZBEfnm5c9cLepoZCZByZAS6yVpl9CUXJlzdU8kdxVlg4VgAK4C745C7Q5nQKn7zLF65h8O7jVZCIuu2yM2IGTIMJhn40gZC6mzfRGfmnOjNr3IJ3JeuzgroDsZD", val webhookVerified: Boolean = true, val subscriptionPlan: String = "Enterprise Pro", val quotaLimit: Int = 100000, val quotaUsed: Int = 18450, val status: String = "ACTIVE" ) @Entity(tableName = "contact_categories") data class ContactCategoryEntity( @PrimaryKey(autoGenerate = true) val id: Long = 0, val name: String, val description: String, val colorHex: String, val isActive: Boolean = true ) @Entity(tableName = "contacts") data class ContactEntity( @PrimaryKey(autoGenerate = true) val id: Long = 0, val countryCode: String = "91", val mobileNumber: String, val e164Phone: String, val customerName: String, val businessName: String = "", val email: String = "", val city: String = "", val district: String = "", val state: String = "", val pinCode: String = "", val categoryId: Long = 1, val categoryName: String = "Consumer Upload List", val productInterest: String = "", val tags: String = "", val optInStatus: String = "OPTED_IN", // OPTED_IN, PENDING, OPTED_OUT val consentSource: String = "Consumer CSV Upload", val consentDate: String = "2026-10-16", val customerNotes: String = "", val isApprovedByAdmin: Boolean = true, val isConsumerUpload: Boolean = true, // Messages send only to Consumers, not Vendors/Retailers val createdAt: Long = System.currentTimeMillis() ) @Entity(tableName = "partners") data class PartnerEntity( @PrimaryKey(autoGenerate = true) val id: Long = 0, val name: String, val organization: String = "", val mobileNumber: String, val district: String = "", val state: String = "", val pinCode: String = "", val partnerType: String = "Channel Partner", // Channel Partner, Distributor, Franchise val isActive: Boolean = true, val createdAt: Long = System.currentTimeMillis() ) @Entity(tableName = "whatsapp_templates") data class WhatsAppTemplateEntity( @PrimaryKey val id: String, val templateName: String, val category: String, // MARKETING, UTILITY val language: String = "en_US", val headerType: String = "TEXT", // NONE, TEXT, IMAGE, VIDEO, DOCUMENT val headerContent: String = "", val bodyText: String, val exampleVariables: String = "{{1}}=CustomerName, {{2}}=DiscountOffer", val footerText: String = "Reply STOP to unsubscribe", val buttonsJson: String = "[{\"type\":\"QUICK_REPLY\",\"text\":\"Chat with Sales\"},{\"type\":\"URL\",\"text\":\"View Catalogue\",\"url\":\"https://sunpower.example.com/cat\"}]", val metaStatus: String = "APPROVED" // APPROVED, PENDING, REJECTED ) @Entity(tableName = "campaigns") data class CampaignEntity( @PrimaryKey(autoGenerate = true) val id: Long = 0, val title: String, val description: String, val templateId: String, val templateName: String, val categoryNames: String, val targetCount: Int, val eligibleCount: Int, val sentCount: Int = 0, val deliveredCount: Int = 0, val readCount: Int = 0, val failedCount: Int = 0, val status: String = "QUEUED", // DRAFT, QUEUED, IN_PROGRESS, COMPLETED, PAUSED, CANCELLED val scheduledTime: String = "Immediate", val mediaUrl: String = "", val variableValues: String = "SunPower Mega Festive 25% Off", val createdAt: Long = System.currentTimeMillis() ) @Entity(tableName = "campaign_recipients") data class CampaignRecipientEntity( @PrimaryKey(autoGenerate = true) val id: Long = 0, val campaignId: Long, val contactId: Long, val phone: String, val customerName: String, val status: String = "QUEUED", // QUEUED, SENT, DELIVERED, READ, FAILED val sentAt: Long = 0L, val deliveredAt: Long = 0L, val readAt: Long = 0L, val errorMessage: String = "" ) @Entity(tableName = "products") data class ProductEntity( @PrimaryKey(autoGenerate = true) val id: Long = 0, val name: String, val sku: String, val category: String, val price: Double, val discountPercent: Int, val description: String, val brochureUrl: String, val enquiryLink: String, val isActive: Boolean = true ) @Entity(tableName = "leads") data class LeadEntity( @PrimaryKey(autoGenerate = true) val id: Long = 0, val customerName: String, val mobileNumber: String, val businessName: String, val campaignSource: String, val productInterest: String, val enquiryDescription: String, val status: String = "NEW", // NEW, CONTACTED, INTERESTED, FOLLOW_UP, QUOTATION_SENT, CONVERTED, LOST val assignedTo: String = "Rahul Sharma", val followUpDate: String = "2026-10-20", val conversionValue: Double = 0.0, val salesNotes: String = "", val createdAt: Long = System.currentTimeMillis() ) @Entity(tableName = "conversation_messages") data class ConversationMessageEntity( @PrimaryKey(autoGenerate = true) val id: Long = 0, val phone: String, val customerName: String, val messageText: String, val isIncoming: Boolean, val timestamp: Long = System.currentTimeMillis(), val deliveryStatus: String = "READ", // SENT, DELIVERED, READ val relatedCampaignId: Long? = null, val isInteractiveReply: Boolean = false, val buttonPayload: String = "" ) @Entity(tableName = "audit_logs") data class AuditLogEntity( @PrimaryKey(autoGenerate = true) val id: Long = 0, val actionType: String, val actorRole: String, // CONSUMER, ADMIN, SUPER_ADMIN val description: String, val timestamp: Long = System.currentTimeMillis() ) @Entity(tableName = "subscription_plans") data class SubscriptionPlanEntity( @PrimaryKey val id: String, val name: String, val monthlyPrice: Double, val contactLimit: Int, val messageQuota: Int, val seats: Int, val features: String )