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 { id } from "../id.js";
import { DriveFile } from "./drive-file.js";
export let User = class User {
    id;
    createdAt;
    updatedAt;
    lastFetchedAt;
    lastActiveDate;
    hideOnlineStatus;
    username;
    usernameLower;
    name;
    followersCount;
    followingCount;
    movedToUri;
    alsoKnownAs;
    notesCount;
    avatarId;
    avatarUrl;
    avatarBlurhash;
    avatar;
    bannerId;
    bannerUrl;
    bannerBlurhash;
    banner;
    tags;
    isSuspended;
    isSilenced;
    isLocked;
    isBot;
    isCat;
    speakAsCat;
    isAdmin;
    isModerator;
    isExplorable;
    // アカウントが削除されたかどうかのフラグだが、完全に削除される際は物理削除なので実質削除されるまでの「削除が進行しているかどうか」のフラグ
    isDeleted;
    emojis;
    host;
    inbox;
    sharedInbox;
    featured;
    uri;
    followersUri;
    token;
    driveCapacityOverrideMb;
    canBite;
    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", String)
], User.prototype, "id", void 0);
_ts_decorate([
    Index(),
    Column("timestamp with time zone", {
        comment: "The created date of the User."
    }),
    _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
], User.prototype, "createdAt", void 0);
_ts_decorate([
    Index(),
    Column("timestamp with time zone", {
        nullable: true,
        comment: "The updated date of the User."
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "updatedAt", void 0);
_ts_decorate([
    Column("timestamp with time zone", {
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "lastFetchedAt", void 0);
_ts_decorate([
    Index(),
    Column("timestamp with time zone", {
        nullable: true
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "lastActiveDate", void 0);
_ts_decorate([
    Column("boolean", {
        default: false
    }),
    _ts_metadata("design:type", Boolean)
], User.prototype, "hideOnlineStatus", void 0);
_ts_decorate([
    Column("varchar", {
        length: 128,
        comment: "The username of the User."
    }),
    _ts_metadata("design:type", String)
], User.prototype, "username", void 0);
_ts_decorate([
    Index(),
    Column("varchar", {
        length: 128,
        select: false,
        comment: "The username (lowercased) of the User."
    }),
    _ts_metadata("design:type", String)
], User.prototype, "usernameLower", void 0);
_ts_decorate([
    Column("varchar", {
        length: 128,
        nullable: true,
        comment: "The name of the User."
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "name", void 0);
_ts_decorate([
    Column("integer", {
        default: 0,
        comment: "The count of followers."
    }),
    _ts_metadata("design:type", Number)
], User.prototype, "followersCount", void 0);
_ts_decorate([
    Column("integer", {
        default: 0,
        comment: "The count of following."
    }),
    _ts_metadata("design:type", Number)
], User.prototype, "followingCount", void 0);
_ts_decorate([
    Column("varchar", {
        length: 512,
        nullable: true,
        comment: "The URI of the new account of the User"
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "movedToUri", void 0);
_ts_decorate([
    Column("simple-array", {
        nullable: true,
        comment: "URIs the user is known as too"
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "alsoKnownAs", void 0);
_ts_decorate([
    Column("integer", {
        default: 0,
        comment: "The count of notes."
    }),
    _ts_metadata("design:type", Number)
], User.prototype, "notesCount", void 0);
_ts_decorate([
    Column({
        ...id(),
        nullable: true,
        comment: "The ID of avatar DriveFile."
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "avatarId", void 0);
_ts_decorate([
    Column("varchar", {
        length: 512,
        nullable: true,
        comment: "The URL of the avatar DriveFile"
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "avatarUrl", void 0);
_ts_decorate([
    Column("varchar", {
        length: 128,
        nullable: true,
        comment: "The blurhash of the avatar DriveFile"
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "avatarBlurhash", void 0);
_ts_decorate([
    OneToOne((type)=>DriveFile, {
        onDelete: "SET NULL"
    }),
    JoinColumn(),
    _ts_metadata("design:type", Object)
], User.prototype, "avatar", void 0);
_ts_decorate([
    Column({
        ...id(),
        nullable: true,
        comment: "The ID of banner DriveFile."
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "bannerId", void 0);
_ts_decorate([
    Column("varchar", {
        length: 512,
        nullable: true,
        comment: "The URL of the banner DriveFile"
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "bannerUrl", void 0);
_ts_decorate([
    Column("varchar", {
        length: 128,
        nullable: true,
        comment: "The blurhash of the banner DriveFile"
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "bannerBlurhash", void 0);
_ts_decorate([
    OneToOne((type)=>DriveFile, {
        onDelete: "SET NULL"
    }),
    JoinColumn(),
    _ts_metadata("design:type", Object)
], User.prototype, "banner", void 0);
_ts_decorate([
    Index(),
    Column("varchar", {
        length: 128,
        array: true,
        default: "{}"
    }),
    _ts_metadata("design:type", Array)
], User.prototype, "tags", void 0);
_ts_decorate([
    Index(),
    Column("boolean", {
        default: false,
        comment: "Whether the User is suspended."
    }),
    _ts_metadata("design:type", Boolean)
], User.prototype, "isSuspended", void 0);
_ts_decorate([
    Column("boolean", {
        default: false,
        comment: "Whether the User is silenced."
    }),
    _ts_metadata("design:type", Boolean)
], User.prototype, "isSilenced", void 0);
_ts_decorate([
    Column("boolean", {
        default: false,
        comment: "Whether the User is locked."
    }),
    _ts_metadata("design:type", Boolean)
], User.prototype, "isLocked", void 0);
_ts_decorate([
    Column("boolean", {
        default: false,
        comment: "Whether the User is a bot."
    }),
    _ts_metadata("design:type", Boolean)
], User.prototype, "isBot", void 0);
_ts_decorate([
    Column("boolean", {
        default: false,
        comment: "Whether the User is a cat."
    }),
    _ts_metadata("design:type", Boolean)
], User.prototype, "isCat", void 0);
_ts_decorate([
    Column("boolean", {
        default: true,
        comment: "Whether to speak as a cat if isCat."
    }),
    _ts_metadata("design:type", Boolean)
], User.prototype, "speakAsCat", void 0);
_ts_decorate([
    Column("boolean", {
        default: false,
        comment: "Whether the User is the admin."
    }),
    _ts_metadata("design:type", Boolean)
], User.prototype, "isAdmin", void 0);
_ts_decorate([
    Column("boolean", {
        default: false,
        comment: "Whether the User is a moderator."
    }),
    _ts_metadata("design:type", Boolean)
], User.prototype, "isModerator", void 0);
_ts_decorate([
    Index(),
    Column("boolean", {
        default: true,
        comment: "Whether the User is explorable."
    }),
    _ts_metadata("design:type", Boolean)
], User.prototype, "isExplorable", void 0);
_ts_decorate([
    Column("boolean", {
        default: false,
        comment: "Whether the User is deleted."
    }),
    _ts_metadata("design:type", Boolean)
], User.prototype, "isDeleted", void 0);
_ts_decorate([
    Column("varchar", {
        length: 128,
        array: true,
        default: "{}"
    }),
    _ts_metadata("design:type", Array)
], User.prototype, "emojis", void 0);
_ts_decorate([
    Index(),
    Column("varchar", {
        length: 512,
        nullable: true,
        comment: "The host of the User. It will be null if the origin of the user is local."
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "host", void 0);
_ts_decorate([
    Column("varchar", {
        length: 512,
        nullable: true,
        comment: "The inbox URL of the User. It will be null if the origin of the user is local."
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "inbox", void 0);
_ts_decorate([
    Column("varchar", {
        length: 512,
        nullable: true,
        comment: "The sharedInbox URL of the User. It will be null if the origin of the user is local."
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "sharedInbox", void 0);
_ts_decorate([
    Column("varchar", {
        length: 512,
        nullable: true,
        comment: "The featured URL of the User. It will be null if the origin of the user is local."
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "featured", void 0);
_ts_decorate([
    Index(),
    Column("varchar", {
        length: 512,
        nullable: true,
        comment: "The URI of the User. It will be null if the origin of the user is local."
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "uri", void 0);
_ts_decorate([
    Column("varchar", {
        length: 512,
        nullable: true,
        comment: "The URI of the user Follower Collection. It will be null if the origin of the user is local."
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "followersUri", void 0);
_ts_decorate([
    Index({
        unique: true
    }),
    Column("char", {
        length: 16,
        nullable: true,
        unique: true,
        comment: "The native access token of the User. It will be null if the origin of the user is local."
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "token", void 0);
_ts_decorate([
    Column("integer", {
        nullable: true,
        comment: "Overrides user drive capacity limit"
    }),
    _ts_metadata("design:type", Object)
], User.prototype, "driveCapacityOverrideMb", void 0);
_ts_decorate([
    Column("enum", {
        nullable: false,
        default: "nobody",
        enum: [
            "anyone",
            "followers",
            "nobody"
        ]
    }),
    _ts_metadata("design:type", String)
], User.prototype, "canBite", void 0);
User = _ts_decorate([
    Entity(),
    Index([
        "usernameLower",
        "host"
    ], {
        unique: true
    }),
    _ts_metadata("design:type", Function),
    _ts_metadata("design:paramtypes", [
        typeof Partial === "undefined" ? Object : Partial
    ])
], User);
