<?php

namespace App\Http\Requests;

use App\Support\IdFormatter;
use Illuminate\Foundation\Http\FormRequest;

abstract class CreatorRequest extends FormRequest
{
    abstract protected function creatorNameRule(): array;

    public function rules(): array
    {
        return [
            'creator_name' => $this->creatorNameRule(),
            'tiktok_link' => ['nullable', 'string', 'url', 'max:500'],
            'tiktok_cid' => ['nullable', 'string', 'max:100'],
            'instagram_link' => ['nullable', 'string', 'url', 'max:500'],
            'facebook_link' => ['nullable', 'string', 'url', 'max:500'],
            'contact_email' => ['nullable', 'email', 'max:255'],
            'contact_phone' => ['nullable', 'string', 'max:20'],
            'contact_zalo' => ['nullable', 'string', 'max:20'],
            'followers' => ['nullable', 'numeric', 'min:0', 'max:4294967295'],
            'gmv' => ['nullable', 'numeric', 'min:0', 'max:18446744073709551615'],
            'items' => ['nullable', 'numeric', 'min:0', 'max:18446744073709551615'],
            'average_views' => ['nullable', 'numeric', 'min:0', 'max:18446744073709551615'],
            'audience' => ['nullable', 'string', 'max:2000'],
            'advantages' => ['nullable', 'string', 'max:2000'],
            'content' => ['nullable', 'string', 'max:2000'],
            'address' => ['nullable', 'string', 'max:500'],
            'notes' => ['nullable', 'string', 'max:2000'],
        ];
    }

    public function attributes(): array
    {
        return [
            'creator_name' => 'Tên KOL/Creator',
            'tiktok_link' => 'Link TikTok',
            'tiktok_cid' => 'CID TikTok',
            'instagram_link' => 'Link Instagram',
            'facebook_link' => 'Link Facebook',
            'contact_email' => 'Email liên hệ',
            'contact_phone' => 'Số điện thoại',
            'contact_zalo' => 'Zalo',
            'followers' => 'Số người theo dõi',
            'gmv' => 'Doanh thu (GMV)',
            'items' => 'Số sp đã bán',
            'average_views' => 'Lượt xem trung bình',
            'audience' => 'Đối tượng khách hàng',
            'advantages' => 'Lợi thế',
            'address' => 'Địa chỉ',
            'notes' => 'Ghi chú',
        ];
    }

    public function messages(): array
    {
        return [
            'creator_name.required' => 'Vui lòng nhập tên KOL/Creator',
            'creator_name.max' => 'Tên KOL/Creator không được vượt quá 255 ký tự',
            'creator_name.unique' => 'Tên KOL/Creator này đã tồn tại trong hệ thống, vui lòng chọn tên khác',
            'tiktok_link.url' => 'Link TikTok phải là URL hợp lệ',
            'instagram_link.url' => 'Link Instagram phải là URL hợp lệ',
            'facebook_link.url' => 'Link Facebook phải là URL hợp lệ',
            'contact_email.email' => 'Email liên hệ không hợp lệ',
            'followers.integer' => 'Số người theo dõi phải là số nguyên',
            'followers.min' => 'Số người theo dõi không được âm',
            'gmv.integer' => 'Doanh thu phải là số nguyên',
            'gmv.min' => 'Doanh thu không được âm',
            'items.integer' => 'Số sp đã bán phải là số nguyên',
            'items.min' => 'Số sp đã bán không được âm',
        ];
    }

    protected function getOrgBin(): ?string
    {
        $orgHex = session('organization_hex') ?? session('organization_id');
        return $orgHex ? IdFormatter::hexToBinary($orgHex) : null;
    }
}
