<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Models\Project;
use App\Models\Product;
use PhpOffice\PhpSpreadsheet\IOFactory;
use Illuminate\Support\Str;

class ImportProductsExcel extends Command
{
    protected $signature = 'import:products-excel {file=sanpham.xlsx}';
    protected $description = 'Import sản phẩm từ file Excel vào dự án Hà Quang 1';

    public function handle()
    {
        $filePath = $this->argument('file');
        
        if (!file_exists($filePath)) {
            $this->error("Không tìm thấy file: {$filePath}");
            return 1;
        }

        $this->info("Đang đọc file Excel...");
        $spreadsheet = IOFactory::load($filePath);
        $worksheet = $spreadsheet->getActiveSheet();
        $rows = $worksheet->toArray();

        // 1. Đảm bảo có dự án Hà Quang 1
        $project = Project::firstOrCreate(
            ['name' => 'Hà Quang 1'],
            ['code' => 'HQ1']
        );

        $this->info("Dự án: {$project->name} (ID: {$project->id})");

        // 2. Duyệt dữ liệu (bỏ qua dòng tiêu đề)
        $count = 0;
        foreach ($rows as $index => $row) {
            if ($index === 0 || empty($row[2])) continue; // Bỏ qua header hoặc dòng trống mã lô

            $code = $row[2];
            
            // Chuẩn hóa số
            $area = (float) $row[3];
            $price_per_unit = $this->parseMoney($row[4]);
            $total_price = $this->parseMoney($row[5]);
            $qsdd_value = $this->parseMoney($row[6]);
            $foundation_temp_value = $this->parseMoney($row[7]);
            $contract_temp_value = $this->parseMoney($row[8]);

            // Phân tách hạ tầng (JSONB)
            $infraRaw = $row[14] ?? '';
            $infraJson = $this->parseInfrastructure($infraRaw);

            // Custom data
            $customData = [
                'block' => $row[1],
                'building_density' => $row[12],
                'legal_status_raw' => $row[15],
                'summary_legal' => $row[19],
            ];

            Product::updateOrCreate(
                ['code' => $code, 'project_id' => $project->id],
                [
                    'product_type' => 'LAND', // Mặc định là đất nền theo file
                    'area' => $area,
                    'price_per_unit' => $price_per_unit,
                    'total_price' => $total_price,
                    'qsdd_value' => $qsdd_value,
                    'foundation_temp_value' => $foundation_temp_value,
                    'contract_temp_value' => $contract_temp_value,
                    'adjacent_road' => $row[9],
                    'frontage_count' => (int) $row[10],
                    'max_floors' => (int) $row[11],
                    'construction_status' => $row[13] ?? 'Chưa xây dựng',
                    'infrastructure_status' => $infraJson,
                    'custom_data' => $customData,
                    'status' => 'Đang mở bán',
                ]
            );

            $count++;
            if ($count % 10 === 0) $this->line("Đã import: {$count} sản phẩm...");
        }

        $this->info("Thành công! Đã import tổng cộng {$count} sản phẩm vào dự án Hà Quang 1.");
        return 0;
    }

    private function parseMoney($value)
    {
        if (empty($value)) return 0;
        // Xóa dấu phẩy và khoảng trắng
        return (float) str_replace([',', ' '], '', $value);
    }

    private function parseInfrastructure($raw)
    {
        if (empty($raw)) return [];
        
        $result = [];
        // Tách theo dấu gạch ngang " - "
        $parts = explode(' - ', $raw);
        foreach ($parts as $part) {
            // Tách theo dấu hai chấm ":"
            $subParts = explode(':', $part, 2);
            if (count($subParts) === 2) {
                $key = trim($subParts[0]);
                $value = trim($subParts[1]);
                $result[$key] = $value;
            }
        }
        return $result;
    }
}
