//
//  Conversation.swift
//  Confab
//
//  Model for saved conversations
//
// SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
// Copyright (C) 2026 Rune Olsen
//
// This file is part of Confab.
//
// Confab is licensed under the PolyForm Noncommercial License 1.0.0.
// You may use, study, modify, and share it for any noncommercial
// purpose. Commercial use — including selling Confab or any part of
// it, standalone or bundled into another product or service —
// requires a separate commercial license from the copyright holder.
//
// See the LICENSE file or
// <https://polyformproject.org/licenses/noncommercial/1.0.0> for
// the full license text. For commercial licensing, contact Rune
// Olsen via <https://confab.no>.


import Foundation

struct Conversation: Identifiable, Codable {
    let id: UUID
    var name: String
    var messages: [Message]
    let createdAt: Date
    var updatedAt: Date
    var primaryModel: String? // Primary model used in this conversation
    var folderId: UUID? // Folder this conversation is filed under, if any
    var notesEnabled: Bool // Whether the per-conversation notes.md feature is on
    var notesFilename: String? // Filename under Application Support/oAI/notes/, if notes have ever been created

    nonisolated init(
        id: UUID = UUID(),
        name: String,
        messages: [Message] = [],
        createdAt: Date = Date(),
        updatedAt: Date = Date(),
        primaryModel: String? = nil,
        folderId: UUID? = nil,
        notesEnabled: Bool = false,
        notesFilename: String? = nil
    ) {
        self.id = id
        self.name = name
        self.messages = messages
        self.createdAt = createdAt
        self.updatedAt = updatedAt
        self.primaryModel = primaryModel
        self.folderId = folderId
        self.notesEnabled = notesEnabled
        self.notesFilename = notesFilename
    }
    
    var messageCount: Int {
        messages.count
    }
    
    var lastMessageDate: Date {
        messages.last?.timestamp ?? updatedAt
    }
}
