<?php

namespace App\Models;

use CodeIgniter\Model;

class VendorModel extends Model
{
    protected $table = 'VENDOR_LIST';
    protected $primaryKey = 'SEQ';
    protected $useAutoIncrement = true;
    protected $returnType = 'array';
    protected $useSoftDeletes = false;
    
    protected $allowedFields = [
        'COMPANY_NAME',
        'EMAIL', 
        'CATEGORY',
        'REGION',
        'DESCRIPTION',
        'LOGO',
        'TAGS',
        'APPROVAL_STATUS',
        'APPROVED_DATE',
        'IS_ACT',
        'REG_DATE',
        'MOD_DATE',
        'LAST_LOGIN_DATE',
        'PASSWORD',
        'PHONE',
        'ADDRESS',
        'BUSINESS_NUMBER',
        'CEO_NAME',
        'ESTABLISHMENT_DATE'
    ];
    
    protected $useTimestamps = true;
    protected $createdField = 'REG_DATE';
    protected $updatedField = 'MOD_DATE';
    
    protected $validationRules = [
        'COMPANY_NAME' => 'required|max_length[255]',
        'EMAIL' => 'required|valid_email|is_unique[VENDOR_LIST.EMAIL,SEQ,{SEQ}]',
        'CATEGORY' => 'permit_empty|in_list[FASHION_BEAUTY,FOOD_HEALTH,LIFESTYLE,TECH_ELECTRONICS,SPORTS_LEISURE,CULTURE_ENTERTAINMENT]',
        'REGION' => 'permit_empty|in_list[SEOUL,GYEONGGI,INCHEON,BUSAN,DAEGU,DAEJEON,GWANGJU,ULSAN,OTHER]',
        'APPROVAL_STATUS' => 'permit_empty|in_list[PENDING,APPROVED,REJECTED]',
        'IS_ACT' => 'required|in_list[Y,N]',
        'PHONE' => 'permit_empty|max_length[20]',
        'BUSINESS_NUMBER' => 'permit_empty|max_length[20]'
    ];
    
    protected $validationMessages = [
        'COMPANY_NAME' => [
            'required' => '회사명은 필수입니다.',
            'max_length' => '회사명은 255자를 초과할 수 없습니다.'
        ],
        'EMAIL' => [
            'required' => '이메일은 필수입니다.',
            'valid_email' => '유효한 이메일 형식이 아닙니다.',
            'is_unique' => '이미 등록된 이메일입니다.'
        ],
        'CATEGORY' => [
            'in_list' => '유효하지 않은 카테고리입니다.'
        ],
        'REGION' => [
            'in_list' => '유효하지 않은 지역입니다.'
        ],
        'APPROVAL_STATUS' => [
            'in_list' => '유효하지 않은 승인 상태입니다.'
        ],
        'IS_ACT' => [
            'required' => '활성 상태는 필수입니다.',
            'in_list' => '활성 상태는 Y 또는 N이어야 합니다.'
        ]
    ];
    
    protected $skipValidation = false;
    protected $cleanValidationRules = true;
    
    /**
     * 벤더사 검색
     */
    public function searchVendors($filters = [], $page = 1, $perPage = 12)
    {
        $builder = $this->builder();
        $builder->where('IS_ACT', 'Y');
        
        // 키워드 검색
        if (!empty($filters['keyword'])) {
            $builder->groupStart()
                   ->like('COMPANY_NAME', $filters['keyword'])
                   ->orLike('DESCRIPTION', $filters['keyword'])
                   ->orLike('TAGS', $filters['keyword'])
                   ->groupEnd();
        }
        
        // 카테고리 필터
        if (!empty($filters['category'])) {
            $builder->where('CATEGORY', $filters['category']);
        }
        
        // 지역 필터
        if (!empty($filters['region'])) {
            $builder->where('REGION', $filters['region']);
        }
        
        // 정렬
        switch ($filters['sortBy'] ?? 'latest') {
            case 'partnership':
                $builder->orderBy('PARTNERSHIP_COUNT', 'DESC')
                       ->orderBy('REG_DATE', 'DESC');
                break;
            case 'name':
                $builder->orderBy('COMPANY_NAME', 'ASC');
                break;
            case 'latest':
            default:
                $builder->orderBy('REG_DATE', 'DESC');
                break;
        }
        
        // 페이징
        $offset = ($page - 1) * $perPage;
        return $builder->limit($perPage, $offset)->get()->getResultArray();
    }
    
    /**
     * 검색 결과 총 개수
     */
    public function countSearchResults($filters = [])
    {
        $builder = $this->builder();
        $builder->where('IS_ACT', 'Y');
        
        // 키워드 검색
        if (!empty($filters['keyword'])) {
            $builder->groupStart()
                   ->like('COMPANY_NAME', $filters['keyword'])
                   ->orLike('DESCRIPTION', $filters['keyword'])
                   ->orLike('TAGS', $filters['keyword'])
                   ->groupEnd();
        }
        
        // 카테고리 필터
        if (!empty($filters['category'])) {
            $builder->where('CATEGORY', $filters['category']);
        }
        
        // 지역 필터
        if (!empty($filters['region'])) {
            $builder->where('REGION', $filters['region']);
        }
        
        return $builder->countAllResults();
    }
    
    /**
     * 활성 벤더사 목록
     */
    public function getActiveVendors()
    {
        return $this->where('IS_ACT', 'Y')
                   ->where('APPROVAL_STATUS', 'APPROVED')
                   ->orderBy('REG_DATE', 'DESC')
                   ->findAll();
    }
    
    /**
     * 카테고리별 벤더사 통계
     */
    public function getCategoryStats()
    {
        return $this->select('CATEGORY, COUNT(*) as count')
                   ->where('IS_ACT', 'Y')
                   ->groupBy('CATEGORY')
                   ->findAll();
    }
    
    /**
     * 지역별 벤더사 통계
     */
    public function getRegionStats()
    {
        return $this->select('REGION, COUNT(*) as count')
                   ->where('IS_ACT', 'Y')
                   ->groupBy('REGION')
                   ->findAll();
    }
}