
import {
    Op
} from "sequelize";

import {
    ElementTable,
    AttributeTable
} from "../database/models/structure.mjs";


export async function CreateDirectory(parentId, name)
{
    let ParentDirectory = await ElementTable.findByPk(parentId);

    if (ParentDirectory == null) {
        var NewDirectory = await ElementTable.create({
            type: 'directory'
        });
    } else {
        var NewDirectory = await ParentDirectory.createChild({
            type: 'directory'
        });
    }

    await NewDirectory.createAttribute({
        version: NewDirectory.latestVersion,
        contentType: 'name',
        contentValue: name
    })

    return NewDirectory;
}

export async function GetDirectory(directoryId, version = null)
{
    let Directory = await ElementTable.findByPk(directoryId);

    if (Directory == null) {
        return null;
    }

    if (version == null) {
        version = Directory.latestVersion
    }

    let Attributes = await Directory.getAttribute()

    var Result = {
        id: Directory.id,
        version
    }

    Attributes.forEach((Attribute) => {
        Result[Attribute.contentType] = Attribute.contentValue
    });

    return Result;
}

export async function GetDirectories(parentId = null)
{
    let Directories = await ElementTable.findAll({
        where: {
            [Op.and]: {
                type: 'directory',
                parentId: parentId
            }
        }
    });

    Directories = Directories.map(async (Directory) => {
        let Attributes = await Directory.getAttribute()

        var Result = {
            id: Directory.id,
            version: Directory.latestVersion
        }

        console.log(Attributes);

        Attributes.forEach((Attribute) => {
            Result[Attribute.contentType] = Attribute.contentValue
        });

        return Result;
    })

    await Promise.all(Directories);

    return Directories;
}
