Files
amare/app/Models/SiteSetting.php

147 lines
5.2 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Models;
use App\Policies\SiteSettingPolicy;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Attributes\UsePolicy;
use Illuminate\Database\Eloquent\Model;
/**
* @property array<string, string|null> $social_links
* @property list<array{title?: string, body?: string}>|null $method_steps
* @property list<string>|null $principles
* @property bool $analytics_enabled
* @property string|null $default_og_image_path
* @property string|null $default_og_image_alt
* @property string|null $about_image_path
* @property string|null $about_image_alt
* @property string|null $hero_image_path
* @property string|null $hero_image_alt
* @property string|null $services_hero_image_path
* @property string|null $services_hero_image_alt
* @property string|null $portfolio_hero_image_path
* @property string|null $portfolio_hero_image_alt
* @property string|null $logo_path
* @property string|null $logo_alt
*/
#[Fillable([
'brand_name',
'logo_path',
'logo_alt',
'hero_eyebrow',
'hero_title',
'hero_subtitle',
'hero_cta_label',
'hero_secondary_cta_label',
'hero_note',
'hero_image_path',
'hero_image_alt',
'services_hero_image_path',
'services_hero_image_alt',
'portfolio_hero_image_path',
'portfolio_hero_image_alt',
'about_summary',
'about_image_path',
'about_image_alt',
'manifesto_title',
'manifesto_lead',
'manifesto_body',
'method_intro',
'method_steps',
'principles',
'email',
'phone',
'city',
'social_links',
'default_meta_title',
'default_meta_description',
'default_og_image_path',
'default_og_image_alt',
'analytics_enabled',
'analytics_script',
])]
#[UsePolicy(SiteSettingPolicy::class)]
class SiteSetting extends Model
{
public static function instance(): self
{
return static::query()->firstOrCreate([], [
'brand_name' => 'Amare Assessoria',
'hero_eyebrow' => 'Assessoria e produção de eventos · São Paulo',
'hero_title' => 'Celebrações com propósito',
'hero_subtitle' => 'Planejamento completo para casamentos e eventos corporativos.',
'hero_cta_label' => 'Solicitar proposta',
'hero_secondary_cta_label' => 'Conheça nosso olhar',
'hero_note' => 'Planejamento cuidadoso, comunicação clara e execução segura — do primeiro encontro ao último detalhe.',
'about_summary' => 'Assessoria boutique em São Paulo - SP.',
'manifesto_title' => 'Sofisticação que também se traduz em organização.',
'manifesto_lead' => 'Um evento memorável não nasce apenas de uma boa estética. Ele depende de decisões bem conduzidas, fornecedores alinhados e atenção constante ao que realmente importa.',
'manifesto_body' => 'A Amare combina sensibilidade e precisão para criar encontros coerentes com cada cliente, marca e ocasião — sem fórmulas prontas, excessos ou ruído.',
'method_intro' => 'Clareza em cada etapa. Tranquilidade durante todo o processo.',
'method_steps' => self::defaultMethodSteps(),
'principles' => self::defaultPrinciples(),
'email' => 'amareassessoriaeventos@gmail.com',
'phone' => '(11) 99999-9999',
'city' => 'São Paulo - SP',
'social_links' => [],
'default_meta_title' => 'Amare Assessoria de Eventos',
'default_meta_description' => 'Assessoria premium para casamentos e eventos corporativos em São Paulo.',
'analytics_enabled' => false,
]);
}
/**
* @return list<array{title: string, body: string}>
*/
public static function defaultMethodSteps(): array
{
return [
[
'title' => 'Escuta',
'body' => 'Entendimento do contexto, das prioridades, do público e do que o evento precisa comunicar.',
],
[
'title' => 'Direção',
'body' => 'Definição de escopo, próximos passos, responsabilidades e critérios para orientar decisões.',
],
[
'title' => 'Produção',
'body' => 'Coordenação de cronograma, fornecedores, detalhes, alinhamentos e contingências.',
],
[
'title' => 'Execução',
'body' => 'Presença atenta no evento para que o planejado aconteça com ritmo, cuidado e segurança.',
],
];
}
/**
* @return list<string>
*/
public static function defaultPrinciples(): array
{
return [
'Personalização sem complicação desnecessária',
'Comunicação clara e decisões bem orientadas',
'Atenção à experiência de clientes e convidados',
'Execução responsável do início ao fim',
];
}
/**
* @return array<string, string|class-string>
*/
protected function casts(): array
{
return [
'social_links' => 'array',
'method_steps' => 'array',
'principles' => 'array',
'analytics_enabled' => 'boolean',
];
}
}