<?php

namespace App\Imports;

use App\Http\Models\Link;
use App\Http\Models\LinkTaskDetail;
use App\Http\Models\Site;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\Importable;
use Maatwebsite\Excel\Concerns\ToCollection;

class DemoLinkImport implements ToCollection
{
    use Importable;
    protected $siteId;

    public function __construct()
    {

    }

    const FIELD_MAP = [
        0 => 'domain',
        4 => 'type',
        5 => 'type_domain',
        6 => 'username',
        7 => 'account',
        8 => 'password',
        9 => 'page',
        10 => 'create_time',
        11 => 'upload_time'
    ];


    public function collection(Collection $collections)
    {
        $allSites = Site::query()->select(['id', 'domain'])->get();

        $allLinks = Link::all();

        $all = collect([]);

        $noSiteList = [];
        $noLink = [];
        foreach ($collections as $key => $collection) {

            if ($key < 1) {
                continue;
            }

            $temp = $this->fieldMap($collection);


            $hasSite = $allSites->firstWhere('domain', $temp['domain']);
            if ($hasSite) {

                $hasLink = $allLinks->firstWhere('url', $temp['type_domain']);
                if (!$hasLink) {
                    $noLink[] = $temp;

                }

                $createdAt = $temp['create_time'] ? date('Y-m-d H:i:s', $temp['create_time']) : null;
                $inserted = [
                    'link_type' => $temp['type'],
                    'link_url' => $temp['type_domain'],
                    'link_id' => $hasLink->id ?? 0,
                    'redundant_site_id' => $hasSite->id,
                    'username' => $temp['username'],
                    'email' => $temp['account'],
                    'password' => $temp['password'],
                    'url' => $temp['page'],
                    'created_at' => $createdAt,
                    'enable' => 1,
                    'status' => 5
                ];
                $all->push(collect($inserted));
            } else {
                $noSiteList[] = $temp;
            }
        }

        $allItems = $all->chunk(5000)->toArray();
        foreach ($allItems as $item) {
            LinkTaskDetail::query()->insert($item);
        }

    }

    public function collection2(Collection $collections)
    {

        $allLinks = Link::all();

        $all = collect([]);

        foreach ($collections as $key => $collection) {

            if ($key < 1) {
                continue;
            }


            $temp = $this->fieldMap($collection);


            $linkTypes = Link::TYPES;

            array_walk($linkTypes, function ($item) {
                return strtolower($item);
            });
            $typeIndex = array_search(strtolower($temp['type']), $linkTypes);

            $noTypeList = [];
            if ($typeIndex === false) {
//                continue;
                $noTypeList[] = $temp['type'];

            }
            dd($noTypeList);
            $hasLink = $allLinks->where('url', $temp['type_domain'])->firstWhere('type', $typeIndex);
            if (!$hasLink) {
                $inserted = [
                    'is_export' => 1,
                    'type' => $typeIndex,
                    'url' => $temp['type_domain'],
                    'created_at' => date('Y-m-d H:i:s')

                ];
                $all->push(collect($inserted));
            }


        }

        $allItems = $all->chunk(5000)->toArray();
//        foreach ($allItems as $item) {
//            Link::query()->insert($item);
//        }

    }


    public function fieldMap($collect): array
    {

        $result = [];
        foreach ($collect as $inx => $val) {
            if (empty(self::FIELD_MAP[$inx])) continue;
            $result[self::FIELD_MAP[$inx]] = $val;
        }
        return $result;
    }

}