<?php

namespace App\Controllers;

use CodeIgniter\RESTful\ResourceController;
use App\Libraries\JwtLib\JWT;
use App\Libraries\JwtLib\Key;
use App\Models\LoginModel;

class Mypage extends ResourceController
{
    // 사용자 상세 정보 조회
    public function myDetail()
    {
        // 한국 시간으로 설정
        date_default_timezone_set('Asia/Seoul');

        $db = \Config\Database::connect();
        $request = $this->request->getJSON(true);
        $memberType = isset($request['MEMBER_TYPE']) ? $request['MEMBER_TYPE'] : null;
        $memberSeq = isset($request['MEMBER_SEQ']) ? $request['MEMBER_SEQ'] : null;

        try {
            // 멤버 타입에 따라 다른 테이블에서 조회
            switch ($memberType) {
                case 'INFLUENCER':
                case 'I':
                    $userInfo = $db->table('USER_LIST')
                        ->where('SEQ', $memberSeq)
                        ->get()
                        ->getRowArray();
                    break;

                case 'VENDOR':
                case 'V':
                    $userInfo = $db->table('VENDOR_LIST')
                        ->where('SEQ', $memberSeq)
                        ->get()
                        ->getRowArray();
                    break;

                case 'BRAND':
                case 'B':
                    $userInfo = $db->table('BRAND_LIST')
                        ->where('SEQ', $memberSeq)
                        ->get()
                        ->getRowArray();
                    break;

                default:
                    return $this->respond([
                        'status' => 'fail',
                        'message' => '알 수 없는 회원 타입입니다.'
                    ], 400);
            }

            if (!$userInfo) {
                return $this->respond([
                    'status' => 'fail',
                    'message' => '사용자 정보를 찾을 수 없습니다.'
                ], 404);
            }

            // MEMBER_TYPE 정규화 (I -> INFLUENCER 등)
            if (isset($userInfo['MEMBER_TYPE'])) {
                switch ($userInfo['MEMBER_TYPE']) {
                    case 'I':
                        $userInfo['MEMBER_TYPE'] = 'INFLUENCER';
                        break;
                    case 'V':
                        $userInfo['MEMBER_TYPE'] = 'VENDOR';
                        break;
                    case 'B':
                        $userInfo['MEMBER_TYPE'] = 'BRAND';
                        break;
                }
            }

            return $this->respond($userInfo, 200);

        } catch (\Exception $e) {
            return $this->respond([
                'status' => 'fail',
                'message' => 'DB 오류: ' . $e->getMessage()
            ], 500);
        }
    }

    // 사용자 정보 수정
    public function myUpdate(){
        // 한국 시간으로 설정
        date_default_timezone_set('Asia/Seoul');

        $db = \Config\Database::connect();
        $request = $this->request->getJSON(true);
        $memberType = isset($request['MEMBER_TYPE']) ? $request['MEMBER_TYPE'] : null;
        $memberSeq = isset($request['MEMBER_SEQ']) ? $request['MEMBER_SEQ'] : null;

        try {
            // 멤버 타입에 따라 다른 테이블에서 업데이트
            switch ($memberType) {
                case 'INFLUENCER':
                case 'I':
                    $table = 'USER_LIST';
                    break;

                case 'VENDOR':
                case 'V':
                    $table = 'VENDOR_LIST';
                    break;

                case 'BRAND':
                case 'B':
                    $table = 'BRAND_LIST';
                    break;

                default:
                    return $this->respond([
                        'status' => 'fail',
                        'message' => '알 수 없는 회원 타입입니다.'
                    ], 400);
            }

            // 업데이트할 데이터
            $data = [];

            // 공통 필드
            if (isset($request['EMAIL'])) {
                $data['EMAIL'] = $request['EMAIL'];
            }
            if (isset($request['PASSWORD']) && !empty($request['PASSWORD'])) {
                $data['PASSWORD'] = password_hash($request['PASSWORD'], PASSWORD_DEFAULT);
            }

            // 인플루언서 전용 필드
            if (($memberType === 'INFLUENCER' || $memberType === 'I')) {
                if (isset($request['PHONE'])) {
                    $data['PHONE'] = $request['PHONE'];
                }
                if (isset($request['NICK_NAME'])) {
                    $data['NICK_NAME'] = $request['NICK_NAME'];
                }
                if (isset($request['SNS_TYPE'])) {
                    $data['SNS_TYPE'] = $request['SNS_TYPE'];
                }
                if (isset($request['SNS_LINK_ID'])) {
                    $data['SNS_LINK_ID'] = $request['SNS_LINK_ID'];
                }
            }

            // 벤더/브랜드 전용 필드
            if (($memberType !== 'INFLUENCER' && $memberType !== 'I')) {
                if (isset($request['COMPANY_NAME'])) {
                    $data['COMPANY_NAME'] = $request['COMPANY_NAME'];
                }
                if (isset($request['HP'])) {
                    $data['HP'] = $request['HP'];
                }
            }

            if (empty($data)) {
                return $this->respond([
                    'status' => 'fail',
                    'message' => '업데이트할 데이터가 없습니다.'
                ], 400);
            }

            // 업데이트 실행
            $result = $db->table($table)
                ->where('SEQ', $memberSeq)
                ->update($data);

            if ($result) {
                return $this->respond([
                    'status' => 'success',
                    'message' => '사용자 정보가 성공적으로 업데이트되었습니다.',
                    'data' => $data
                ], 200);
            } else {
                return $this->respond([
                    'status' => 'fail',
                    'message' => '업데이트에 실패했습니다.'
                ], 500);
            }

        } catch (\Exception $e) {
            return $this->respond([
                'status' => 'fail',
                'message' => 'DB 오류: ' . $e->getMessage()
            ], 500);
        }
    }
}