<?php

namespace Bot;

class locationHandler
{
    private $provinces; // آرایه استان‌ها به شکل [{id, name}, ...]
    private $cities;    // آرایه شهرها به شکل [{province_id, province_name, cities: []}, ...]

    public function __construct()
    {
        $this->loadData();
    }

    private function loadData()
    {
        $provincesPath = __DIR__ . '/data/provinces.json';
        $citiesPath = __DIR__ . '/data/cities.json';

        if (!file_exists($provincesPath)) {
            error_log("❌ فایل استان‌ها پیدا نشد: $provincesPath");
        }

        if (!file_exists($citiesPath)) {
            error_log("❌ فایل شهرها پیدا نشد: $citiesPath");
        }

        $this->provinces = json_decode(file_get_contents($provincesPath), true);
        $this->cities = json_decode(file_get_contents($citiesPath), true);
    }

    // کلیدبرد استان‌ها (نام استان‌ها)
    public function getProvincesKeyboard(): array
    {
        $keyboard = [];
        // تقسیم به گروه‌های دو تایی
        foreach (array_chunk($this->provinces, 2) as $chunk) {
            $row = [];
            foreach ($chunk as $province) {
                $row[] = [
                    'text' => $province['name'],
                    'callback_data' => 'select_province_' . $province['id']
                ];
            }
            $keyboard[] = $row;
        }
        return [
            'inline_keyboard' => $keyboard
        ];
    }

    // کلیدبرد شهرها بر اساس id استان
    public function getCitiesKeyboard(string $provinceId): ?array
    {
        // پیدا کردن آرایه شهرها بر اساس province_id
        $provinceData = null;
        foreach ($this->cities as $item) {
            if ($item['province_id'] === $provinceId) {
                $provinceData = $item;
                break;
            }
        }

        if ($provinceData === null) {
            return null;
        }

        $keyboard = [];
        // تقسیم شهرها به گروه‌های دو تایی
        foreach (array_chunk($provinceData['cities'], 2) as $chunk) {
            $row = [];
            foreach ($chunk as $city) {
                $row[] = [
                    'text' => $city,
                    'callback_data' => 'select_city_' . $city
                ];
            }
            $keyboard[] = $row;
        }

        // دکمه بازگشت به استان‌ها
        $keyboard[] = [
            [
                'text' => '🔙 بازگشت',
                'callback_data' => 'back_to_provinces'
            ]
        ];

        return [
            'inline_keyboard' => $keyboard
        ];
    }

    // اعتبارسنجی استان بر اساس id
    public function isValidProvince(string $provinceId): bool
    {
        foreach ($this->provinces as $province) {
            if ($province['id'] === $provinceId) {
                return true;
            }
        }
        return false;
    }

    // اعتبارسنجی شهر بر اساس id استان و نام شهر
    public function isValidCity(string $provinceId, string $city): bool
    {
        foreach ($this->cities as $item) {
            if ($item['province_id'] === $provinceId) {
                return in_array($city, $item['cities']);
            }
        }
        return false;
    }
}
