<?php

namespace Darksparrow\AuxiliumSchemaBuilder\Examples\SchemaBuilder\Schemas;
require_once __DIR__ . "/../../vendor/autoload.php";

use Darksparrow\AuxiliumSchemaBuilder\Attributes\SchemaDocumentChildField;
use Darksparrow\AuxiliumSchemaBuilder\Enumerators\SchemaFieldExistence;
use Darksparrow\AuxiliumSchemaBuilder\Attributes\SchemaDocument;
use Darksparrow\AuxiliumSchemaBuilder\Attributes\SchemaDocumentField;

#[SchemaDocument(
    Name: "message",
    MimeType: "message/rfc822",
)]
class Message
{
    #[SchemaDocumentField(
        Name: "sender",
        Existence: SchemaFieldExistence::SHOULD,
        Comment: "The sender should be attached to a user object if known",
        ValidSchemas: [
            "https://schemas.auxiliumsoftware.co.uk/v1/user.json"
        ],
    )]
    public string $Sender;

    #[SchemaDocumentField(
        Name: "recipients",
        Existence: SchemaFieldExistence::SHOULD,
        Comment: "All direct recipients that are known should be attached",
        ValidSchemas: [
            "https://schemas.auxiliumsoftware.co.uk/v1/collection.json"
        ],
        MaxSize: 0,
        Child: new SchemaDocumentChildField(
            Comment: "All direct recipients should be addressed",
            ValidSchemas: [
                "https://schemas.auxiliumsoftware.co.uk/v1/user.json"
            ]
        ),
    )]
    public string $Recipients;

    #[SchemaDocumentField(
        Name: "indirect_recipients",
        Existence: SchemaFieldExistence::SHOULD,
        Comment: "All cc'd recipients that are known should be attached",
        ValidSchemas: [
            "https://schemas.auxiliumsoftware.co.uk/v1/collection.json"
        ],
        MaxSize: 0,
        Child: new SchemaDocumentChildField(
            Comment: "All direct recipients should be addressed",
            ValidSchemas: [
                "https://schemas.auxiliumsoftware.co.uk/v1/user.json"
            ]
        ),
    )]
    public string $IndirectRecipients;

    #[SchemaDocumentField(
        Name: "sent_at",
        Existence: SchemaFieldExistence::SHOULD,
        Comment: "The date the message was actually sent, if supplied MUST be in ISO 8601 format",
        MaxSize: 64,
        MimeType: "text/plain",
    )]
    public string $SentAt;
}