<?php

namespace App\Console\Commands;

use App\Models\Creator;
use App\Support\IdFormatter;
use Illuminate\Console\Command;
use PhpOffice\PhpSpreadsheet\IOFactory;

class ImportCidFromExcel extends Command
{
    protected $signature = 'app:import-cid-excel
        {file : Đường dẫn file Excel}
        {--org= : Organization hex ID (mặc định dùng org của ImportOldKocs)}';

    protected $description = 'Đọc file Excel (creator_name + cid) và cập nhật tiktok_cid vào bảng creators';

    public function handle(): int
    {
        $file = $this->argument('file');
        if (!file_exists($file)) {
            $this->error("File không tồn tại: $file");
            return 1;
        }

        $orgHex = $this->option('org') ?: '019e90bcf88b7ba13bf40a1ad37afc85';
        $orgBin = IdFormatter::hexToBinary($orgHex);
        if (!$orgBin) {
            $this->error('Organization hex ID không hợp lệ');
            return 1;
        }

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

        if (empty($rows)) {
            $this->warn('File rỗng');
            return 0;
        }

        $header = $rows[0];
        $nameCol = array_search('creator_name', $header);
        $cidCol = array_search('cid', $header);

        if ($nameCol === false || $cidCol === false) {
            $this->error('File phải có 2 cột: creator_name và cid');
            return 1;
        }

        $total = count($rows) - 1;
        $updated = 0;
        $notFound = [];
        $emptyCid = 0;

        $this->output->progressStart($total);

        for ($i = 1; $i < count($rows); $i++) {
            $name = trim($rows[$i][$nameCol] ?? '');
            $cid = trim($rows[$i][$cidCol] ?? '');

            if (empty($name)) {
                $this->output->progressAdvance();
                continue;
            }

            if (empty($cid)) {
                $emptyCid++;
                $this->output->progressAdvance();
                continue;
            }

            $creator = Creator::where('organization_id', $orgBin)
                ->where('creator_name', $name)
                ->first();

            if ($creator) {
                $creator->tiktok_cid = $cid;
                $creator->save();
                $updated++;
            } else {
                $notFound[] = $name;
            }

            $this->output->progressAdvance();
        }

        $this->output->progressFinish();

        $this->info("Hoàn tất!");
        $this->table(
            ['Mục', 'Số lượng'],
            [
                ['Tổng dòng', $total],
                ['Đã cập nhật', $updated],
                ['Không tìm thấy creator', count($notFound)],
                ['CID trống (bỏ qua)', $emptyCid],
            ]
        );

        if ($notFound) {
            $this->warn('Creator không tìm thấy:');
            foreach ($notFound as $name) {
                $this->line("  - $name");
            }
        }

        return 0;
    }
}
