package de.assecutor.votianlt.model;

import lombok.Data;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.index.Indexed;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.Set;

@Data
@Document(collection = "users")
public class User {

    @Id
    private ObjectId id;

    private int usrId;
    private String title;
    private String name; // Nachname
    private String firstname; // Vorname

    // Firmen-/Adressdaten
    private String company; // Firma
    private String companyAddition; // Firmenzusatz
    private String street; // Straße
    private String houseNumber; // Hausnr
    private String addressAddition; // Adresszusatz (optional)
    private String zip; // Postleitzahl
    private String city; // Stadt

    // Abweichende Rechnungsadresse
    private boolean diffInvoiceAddress; // Checkbox für abweichende Rechnungsadresse
    private String invCompany; // Rechnungsadresse: Firma
    private String invCompanyAddition; // Rechnungsadresse: Firmenzusatz
    private String invFirstname; // Rechnungsadresse: Vorname
    private String invLastname; // Rechnungsadresse: Nachname
    private String invStreet; // Rechnungsadresse: Straße
    private String invHouseNumber; // Rechnungsadresse: Hausnr
    private String invAddressAddition; // Rechnungsadresse: Adresszusatz
    private String invZip; // Rechnungsadresse: Postleitzahl
    private String invCity; // Rechnungsadresse: Stadt

    @Indexed(unique = true)
    private String email;

    private String phone;
    private String phone2;
    private String fax;
    private String password;
    private byte isActivated;
    private byte isEmailConfirmed;
    private String passwordCode;
    private LocalDateTime passwordTimestamp;
    private LocalDateTime createdAt;
    private LocalDateTime updatedAt;
    private Set<String> roles;

    // Digitale Abwicklung und App-Nutzer Ortung
    private boolean digitalProcessingEnabled = true; // Digitale Abwicklung per App
    private boolean locationTrackingEnabled = true; // App-Nutzer orten

    // 2-Faktor-Authentifizierung (standardmäßig aktiviert für neue Nutzer)
    private boolean twoFactorEnabled = true;

    // Spracheinstellung (standardmäßig Deutsch)
    @Field("language")
    private Language language = Language.DE;

    // Umsatzsteuer-Satz (als Dezimalwert, z.B. 0.19 für 19 %)
    private BigDecimal vatRate = new BigDecimal("0.19");
}
