import { IsNull } from "typeorm";
import { Users, UsedUsernames } from "../../../../models/index.js";
import config from "../../../../config/index.js";
import define from "../../define.js";
export const meta = {
    tags: [
        "users"
    ],
    requireCredential: false,
    res: {
        type: "object",
        optional: false,
        nullable: false,
        properties: {
            available: {
                type: "boolean",
                optional: false,
                nullable: false
            }
        }
    }
};
export const paramDef = {
    type: "object",
    properties: {
        username: Users.localUsernameSchema
    },
    required: [
        "username"
    ]
};
export default define(meta, paramDef, async (ps)=>{
    // Get exist
    const exist = await Users.countBy({
        host: IsNull(),
        usernameLower: ps.username.toLowerCase()
    });
    const exist2 = await UsedUsernames.countBy({
        username: ps.username.toLowerCase()
    });
    const reserved = config.reservedUsernames?.includes(ps.username.toLowerCase());
    return {
        available: exist === 0 && exist2 === 0 && !reserved
    };
});
