<?php

namespace Lucent\Record;

use Lucent\Database\Database;

class RecordRepo
{
    public function __construct()
    {
    }

    public static function create(Record $record): void
    {
        $recordToDB = $record->toDB();

        Database::make()->table("records")->insert($recordToDB);

    }

    /**
     * @param array<string> $ids
     */
    public static function updateStatusBulk(Status $status, array $ids): void
    {
        Database::make()->table("records")->whereIn("id", $ids)->update([
            'status' => $status->value
        ]);
    }

    public static function update(Record $record): void
    {
        $recordToDB = $record->toDB();
        Database::make()->table("records")->where("id", $record->id)->update($recordToDB);
    }


    /**
     * @param string[] $ids
     */
    public function deleteMany(
        array $ids,
    ): void
    {
        Database::make()->table("records")->whereIn("id", $ids)->delete();
        Database::make()->table("edges")->whereIn("source", $ids)->delete();
        Database::make()->table("edges")->whereIn("target", $ids)->delete();
        Database::make()->table("revisions")->whereIn("recordId", $ids)->delete();
    }

    public function deleteTrashedBySchema(
        string $schemaName,
    ): void
    {
        $ids = Database::make()->table("records")
            ->where("schema", $schemaName)
            ->where("status", Status::TRASHED->value)
            ->get()->pluck("id")->toArray();

        $this->deleteMany($ids);
    }
}
