function _ts_decorate(decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
}
function _ts_metadata(k, v) {
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
}
import { Entity, Column, Index, OneToOne, JoinColumn, PrimaryColumn } from "typeorm";
import { ffVisibility, notificationTypes } from "../../types.js";
import { id } from "../id.js";
import { User } from "./user.js";
import { Page } from "./page.js";
export let UserProfile = class UserProfile {
    userId;
    user;
    location;
    birthday;
    description;
    fields;
    mentions;
    lang;
    url;
    email;
    emailVerifyCode;
    emailVerified;
    emailNotificationTypes;
    publicReactions;
    allowCalls;
    symbolFileId;
    ffVisibility;
    twoFactorTempSecret;
    twoFactorSecret;
    twoFactorEnabled;
    securityKeysAvailable;
    usePasswordLessLogin;
    password;
    moderationNote;
    // TODO: そのうち消す
    clientData;
    // TODO: そのうち消す
    room;
    autoAcceptFollowed;
    noCrawle;
    preventAiLearning;
    alwaysMarkNsfw;
    carefulBot;
    injectFeaturedNote;
    receiveAnnouncementEmail;
    pinnedPageId;
    pinnedPage;
    integrations;
    enableWordMute;
    mutedWords;
    mutedInstances;
    mutingNotificationTypes;
    pronouns;
    //#region Denormalized fields
    userHost;
    //#endregion
    constructor(data){
        if (data == null) return;
        for (const [k, v] of Object.entries(data)){
            this[k] = v;
        }
    }
};
_ts_decorate([
    PrimaryColumn(id()),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "userId", void 0);
_ts_decorate([
    OneToOne((type)=>User, {
        onDelete: "CASCADE"
    }),
    JoinColumn(),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "user", void 0);
_ts_decorate([
    Column("varchar", {
        length: 128,
        nullable: true,
        comment: "The location of the User."
    }),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "location", void 0);
_ts_decorate([
    Column("char", {
        length: 10,
        nullable: true,
        comment: "The birthday (YYYY-MM-DD) of the User."
    }),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "birthday", void 0);
_ts_decorate([
    Column("varchar", {
        length: 2048,
        nullable: true,
        comment: "The description (bio) of the User."
    }),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "description", void 0);
_ts_decorate([
    Column("jsonb", {
        default: []
    }),
    _ts_metadata("design:type", Array)
], UserProfile.prototype, "fields", void 0);
_ts_decorate([
    Column("jsonb", {
        default: []
    }),
    _ts_metadata("design:type", typeof IMentionedRemoteUsers === "undefined" ? Object : IMentionedRemoteUsers)
], UserProfile.prototype, "mentions", void 0);
_ts_decorate([
    Column("varchar", {
        length: 32,
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "lang", void 0);
_ts_decorate([
    Column("varchar", {
        length: 512,
        nullable: true,
        comment: "Remote URL of the user."
    }),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "url", void 0);
_ts_decorate([
    Column("varchar", {
        length: 128,
        nullable: true,
        comment: "The email address of the User."
    }),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "email", void 0);
_ts_decorate([
    Column("varchar", {
        length: 128,
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "emailVerifyCode", void 0);
_ts_decorate([
    Column("boolean", {
        default: false
    }),
    _ts_metadata("design:type", Boolean)
], UserProfile.prototype, "emailVerified", void 0);
_ts_decorate([
    Column("jsonb", {
        default: [
            "follow",
            "receiveFollowRequest",
            "groupInvited"
        ]
    }),
    _ts_metadata("design:type", Array)
], UserProfile.prototype, "emailNotificationTypes", void 0);
_ts_decorate([
    Column("boolean", {
        default: false
    }),
    _ts_metadata("design:type", Boolean)
], UserProfile.prototype, "publicReactions", void 0);
_ts_decorate([
    Column("boolean", {
        default: false
    }),
    _ts_metadata("design:type", Boolean)
], UserProfile.prototype, "allowCalls", void 0);
_ts_decorate([
    Column({
        ...id(),
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "symbolFileId", void 0);
_ts_decorate([
    Column("enum", {
        enum: ffVisibility,
        default: "public"
    }),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "ffVisibility", void 0);
_ts_decorate([
    Column("varchar", {
        length: 128,
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "twoFactorTempSecret", void 0);
_ts_decorate([
    Column("varchar", {
        length: 128,
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "twoFactorSecret", void 0);
_ts_decorate([
    Column("boolean", {
        default: false
    }),
    _ts_metadata("design:type", Boolean)
], UserProfile.prototype, "twoFactorEnabled", void 0);
_ts_decorate([
    Column("boolean", {
        default: false
    }),
    _ts_metadata("design:type", Boolean)
], UserProfile.prototype, "securityKeysAvailable", void 0);
_ts_decorate([
    Column("boolean", {
        default: false
    }),
    _ts_metadata("design:type", Boolean)
], UserProfile.prototype, "usePasswordLessLogin", void 0);
_ts_decorate([
    Column("varchar", {
        length: 128,
        nullable: true,
        comment: "The password hash of the User. It will be null if the origin of the user is local."
    }),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "password", void 0);
_ts_decorate([
    Column("varchar", {
        length: 8192,
        default: ""
    }),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "moderationNote", void 0);
_ts_decorate([
    Column("jsonb", {
        default: {},
        comment: "The client-specific data of the User."
    }),
    _ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
], UserProfile.prototype, "clientData", void 0);
_ts_decorate([
    Column("jsonb", {
        default: {},
        comment: "The room data of the User."
    }),
    _ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
], UserProfile.prototype, "room", void 0);
_ts_decorate([
    Column("boolean", {
        default: false
    }),
    _ts_metadata("design:type", Boolean)
], UserProfile.prototype, "autoAcceptFollowed", void 0);
_ts_decorate([
    Column("boolean", {
        default: false,
        comment: "Whether reject index by crawler."
    }),
    _ts_metadata("design:type", Boolean)
], UserProfile.prototype, "noCrawle", void 0);
_ts_decorate([
    Column("boolean", {
        default: true
    }),
    _ts_metadata("design:type", Boolean)
], UserProfile.prototype, "preventAiLearning", void 0);
_ts_decorate([
    Column("boolean", {
        default: false
    }),
    _ts_metadata("design:type", Boolean)
], UserProfile.prototype, "alwaysMarkNsfw", void 0);
_ts_decorate([
    Column("boolean", {
        default: false
    }),
    _ts_metadata("design:type", Boolean)
], UserProfile.prototype, "carefulBot", void 0);
_ts_decorate([
    Column("boolean", {
        default: true
    }),
    _ts_metadata("design:type", Boolean)
], UserProfile.prototype, "injectFeaturedNote", void 0);
_ts_decorate([
    Column("boolean", {
        default: true
    }),
    _ts_metadata("design:type", Boolean)
], UserProfile.prototype, "receiveAnnouncementEmail", void 0);
_ts_decorate([
    Column({
        ...id(),
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "pinnedPageId", void 0);
_ts_decorate([
    OneToOne((type)=>Page, {
        onDelete: "SET NULL"
    }),
    JoinColumn(),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "pinnedPage", void 0);
_ts_decorate([
    Column("jsonb", {
        default: {}
    }),
    _ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
], UserProfile.prototype, "integrations", void 0);
_ts_decorate([
    Index(),
    Column("boolean", {
        default: false,
        select: false
    }),
    _ts_metadata("design:type", Boolean)
], UserProfile.prototype, "enableWordMute", void 0);
_ts_decorate([
    Column("jsonb", {
        default: []
    }),
    _ts_metadata("design:type", Array)
], UserProfile.prototype, "mutedWords", void 0);
_ts_decorate([
    Column("jsonb", {
        default: [],
        comment: "List of instances muted by the user."
    }),
    _ts_metadata("design:type", Array)
], UserProfile.prototype, "mutedInstances", void 0);
_ts_decorate([
    Column("enum", {
        enum: notificationTypes,
        array: true,
        default: []
    }),
    _ts_metadata("design:type", Array)
], UserProfile.prototype, "mutingNotificationTypes", void 0);
_ts_decorate([
    Column("jsonb", {
        default: {},
        comment: "Language map of user pronouns"
    }),
    _ts_metadata("design:type", typeof Record === "undefined" ? Object : Record)
], UserProfile.prototype, "pronouns", void 0);
_ts_decorate([
    Index(),
    Column("varchar", {
        length: 512,
        nullable: true,
        comment: "[Denormalized]"
    }),
    _ts_metadata("design:type", Object)
], UserProfile.prototype, "userHost", void 0);
UserProfile = _ts_decorate([
    Entity(),
    _ts_metadata("design:type", Function),
    _ts_metadata("design:paramtypes", [
        typeof Partial === "undefined" ? Object : Partial
    ])
], UserProfile);
