<?php

namespace App\Modules\Inventory\Exports;

use Maatwebsite\Excel\Concerns\WithMultipleSheets;
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithTitle;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;

class InventoryTemplateExport implements WithMultipleSheets
{
    public function sheets(): array
    {
        return [
            new InventoryDataSheet(),
            new InventoryInstructionSheet(),
        ];
    }
}

class InventoryDataSheet implements FromArray, WithHeadings, WithTitle, ShouldAutoSize
{
    public function array(): array
    {
        // 資料分頁保持完全空白
        return [];
    }

    public function headings(): array
    {
        return [
            '商品條碼',
            '商品代號',
            '商品名稱',
            '數量',
            '入庫單價',
            '儲位/貨道',
            '批號',
            '產地',
            '效期',
        ];
    }

    public function title(): string
    {
        return '資料填寫';
    }
}

class InventoryInstructionSheet implements FromArray, WithHeadings, WithTitle, ShouldAutoSize
{
    public function array(): array
    {
        return [
            ['商品條碼', '擇一輸入', '系統會「優先」依據條碼匹配商品。若有填寫，條碼必須存在於系統中'],
            ['商品代號', '擇一輸入', '若條碼未填寫，系統會依據代號匹配商品'],
            ['商品名稱', '選填', '僅供對照參考，匯入時系統會自動忽略此欄位內容'],
            ['數量', '必填', '入庫的商品數量，須為大於 0 的數字'],
            ['入庫單價', '選填', '未填寫時將預設使用商品的「採購成本價」'],
            ['儲位/貨道', '選填', '一般倉庫請填寫「儲位(位址)」，販賣機倉庫請填寫「貨道編號」(如: A1)'],
            ['批號', '選填', '如需批次控管請填寫，若留空系統會自動標記為 "NO-BATCH"'],
            ['產地', '選填', '商品的生產地資訊 (如：TW)'],
            ['效期', '選填', '格式請務必使用 YYYY-MM-DD (例如: 2026-12-31)'],
            ['', '', ''],
            ['倉庫類型參考', '', '系統支援以下倉庫性質：'],
            ['標準倉', '', '一般總倉、儲備倉'],
            ['生產倉', '', '加工廠、中央廚房、原材料存放處'],
            ['門市倉', '', '前台通路、店舖銷售現場'],
            ['販賣機', '', 'IoT 自動販賣機設備，建議搭配「貨道」填寫'],
            ['', '', ''],
            ['匹配與匯入規則', '', '1. 系統會優先比對「商品條碼」，其次為「商品代號」。'],
            ['', '', '2. 庫存將匯入至您在匯入前於系統介面所選擇的目標倉庫。'],
            ['', '', '3. 若需區分不同貨道或批次，請分行填寫。'],
        ];
    }

    public function headings(): array
    {
        return ['欄位名稱', '必要性', '填寫說明'];
    }

    public function title(): string
    {
        return '填寫規則';
    }
}
