package com.tt.honeyDue.navigation

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
object LoginRoute

@Serializable
object RegisterRoute

@Serializable
object VerifyEmailRoute

@Serializable
object HomeRoute

@Serializable
object ResidencesRoute

@Serializable
object AddResidenceRoute

// Full-screen join-via-share-code flow (P2 Stream F — replaces
// the old JoinResidenceDialog). Matches iOS JoinResidenceView.
@Serializable
object JoinResidenceRoute

@Serializable
data class EditResidenceRoute(
    val residenceId: Int,
    val name: String,
    val propertyType: Int?,
    val streetAddress: String?,
    val apartmentUnit: String?,
    val city: String?,
    val stateProvince: String?,
    val postalCode: String?,
    val country: String?,
    val bedrooms: Int?,
    val bathrooms: Float?,
    val squareFootage: Int?,
    val lotSize: Float?,
    val yearBuilt: Int?,
    val description: String?,
    val isPrimary: Boolean,
    val ownerUserName: String,
    val createdAt: String,
    val updatedAt: String,
    val owner: Int?,
)

@Serializable
data class ResidenceDetailRoute(val residenceId: Int)

@Serializable
data class EditTaskRoute(
    val taskId: Int,
    val residenceId: Int,
    val title: String,
    val description: String?,
    val categoryId: Int,
    val categoryName: String,
    val frequencyId: Int,
    val frequencyName: String,
    val priorityId: Int,
    val priorityName: String,
    val inProgress: Boolean,
    val dueDate: String?,
    val estimatedCost: String?,
    val createdAt: String,
    val updatedAt: String
)

@Serializable
object TasksRoute

@Serializable
object ProfileRoute

@Serializable
object MainRoute

@Serializable
object MainTabResidencesRoute

@Serializable
object MainTabTasksRoute

@Serializable
object MainTabProfileRoute

@Serializable
object MainTabContractorsRoute

@Serializable
data class ContractorDetailRoute(val contractorId: Int)

@Serializable
object MainTabDocumentsRoute

@Serializable
data class AddDocumentRoute(
    val residenceId: Int,
    val initialDocumentType: String = "other"
)

@Serializable
data class DocumentDetailRoute(val documentId: Int)

@Serializable
data class EditDocumentRoute(val documentId: Int)

@Serializable
object ForgotPasswordRoute

@Serializable
object VerifyResetCodeRoute

@Serializable
object ResetPasswordRoute

@Serializable
object NotificationPreferencesRoute

@Serializable
object ThemeSelectionRoute

// Onboarding Routes
@Serializable
object OnboardingRoute

// Task Completion Route
@Serializable
data class CompleteTaskRoute(
    val taskId: Int,
    val taskTitle: String,
    val residenceName: String
)

// Manage Users Route
@Serializable
data class ManageUsersRoute(
    val residenceId: Int,
    val residenceName: String,
    val isPrimaryOwner: Boolean,
    val residenceOwnerId: Int
)

// Photo Viewer Route
@Serializable
data class PhotoViewerRoute(
    val imageUrls: String, // JSON encoded list
    val initialIndex: Int = 0
)

// Upgrade/Subscription Route
@Serializable
object UpgradeRoute

// Full-screen Free vs. Pro feature comparison (P2 Stream E — replaces
// the old FeatureComparisonDialog). Matches iOS FeatureComparisonView.
@Serializable
object FeatureComparisonRoute

// Task Suggestions Route (P2 Stream H — standalone, non-onboarding entry
// to personalized task suggestions for a residence).
@Serializable
data class TaskSuggestionsRoute(val residenceId: Int)

// Add Task With Residence Route (P2 Stream I — Android port of iOS
// AddTaskWithResidenceView). Residence is pre-selected via residenceId.
@Serializable
data class AddTaskWithResidenceRoute(val residenceId: Int)

// Task Templates Browser Route (P2 Stream G — full-screen browse/preview/
// bulk-apply of the server-driven template catalog). residenceId scopes
// which residence tasks get created against; fromOnboarding switches
// analytics event names.
@Serializable
data class TaskTemplatesBrowserRoute(
    val residenceId: Int,
    val fromOnboarding: Boolean = false,
)

// Dev-only animation testing screen (P5 Streams Q+R — Android port of
// iOS AnimationTestingView).
@Serializable
object AnimationTestingRoute
