// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.

import GRDB
import SessionMessagingKit


public class NewConversationViewModel {
    struct SectionData {
        var sectionName: String
        var contacts: [Profile]
    }

    let sectionData: [SectionData]
    
    init() {
        let contactProfiles: [Profile] = Profile.fetchAllContactProfiles(excludeCurrentUser: true)
        
        var groupedContacts: [String: SectionData] = [:]
        contactProfiles.forEach { profile in
            let displayName = NSMutableString(string: profile.displayName())
            CFStringTransform(displayName, nil, kCFStringTransformToLatin, false)
            CFStringTransform(displayName, nil, kCFStringTransformStripDiacritics, false)
            
            let initialCharacter: String = (displayName.length > 0 ? displayName.substring(to: 1) : "")
            let section: String = initialCharacter.capitalized.isSingleAlphabet ?
            initialCharacter.capitalized :
                "#"
            
            if groupedContacts[section] == nil {
                groupedContacts[section] = SectionData(
                    sectionName: section,
                    contacts: []
                )
            }
            groupedContacts[section]?.contacts.append(profile)
        }
        
        sectionData = groupedContacts.values.sorted { $0.sectionName < $1.sectionName }
    }
}