<?php

declare(strict_types=1);

namespace App\Domain\Account;

use App\Domain\Auth\PasswordResetTokenExpiredException;
use App\Domain\Auth\PasswordResetTokenNotFoundException;
use App\Domain\LatLng;

interface AccountRepository
{
    public function putUnverifiedAccount(string $email, string $passwordHash, string $verificationToken, array $additionalValues = []): int;

    public function verifyAccountByToken(string $verificationToken): string; // enum AccountVerificationResult

    /**
     * @throws AccountNotFoundException
     */
    public function changePasswordHash(string $email, string $passwordHash): void;

    /**
     * @throws AccountNotFoundException
     */
    public function putPasswordResetToken(string $email, string $passwordResetToken): void;

    /**
     * @throws PasswordResetTokenNotFoundException
     */
    public function clearPasswordResetToken(string $email): void;

    /**
     * @throws PasswordResetTokenNotFoundException
     * @throws PasswordResetTokenExpiredException
     
     */
    public function getEMailForPasswordResetToken(string $passwordResetToken): string;

    public function getPasswordHash(string $email,bool $isSuperAdmin = false,bool $isAppUsing = false): ?string;

    public function getAccountId(string $email,bool $isSuperAdmin = false): ?int;

    public function getAccount(int $accountId,bool $isSuperAdmin = false): ?array;

    /** Persönliche Einstellungen des Kontos; leeres Array, wenn noch keine gespeichert sind. */
    public function getEinstellungen(int $accountId): array;

    /** Überschreibt die persönlichen Einstellungen des Kontos vollständig. */
    public function saveEinstellungen(int $accountId, array $einstellungen): void;

    public function checkEMail(string $email,string $accountId = '0') : bool; 
        
    public function getMitarbeiterList(int $kundenid, string $isDeleted) : array;
        
    public function createMitarbeiter(int $kundenId,array $fields) : int;
        
    public function checkAnmeldename(string $name, string $mitarbeiterId = '0') : bool; 
        
    public function putMitarbeiter(int $id, array $fields) : void;  
  
    public function patchMitarbeiter(int $id, string $isDeleted) : void;  
        
    public function generatePass(int $id): array;
        
}
