<?php

namespace model;

use \model;

/**
 * Class projectFollow
 * @package model
 */
class projectFollow extends model
{
    public $table = 'project_follow';
    public $key = 'prf_id';

    public function __construct()
    {
        parent::__construct();
    }


    /**
	 * @param  array $params
	 * @method 根据项目明细id获取跟进列表（分页）
	 * @author hongzhang
	 * @copyright 2025-07-28
	 */
    public function getListByPrfPiIdWithPaging($params)
    {
        $id = (int)$params['prf_pi_id'];
        $page = isset($params['page']) ? (int)$params['page'] : 1;
        $pagesize = isset($params['pagesize']) ? (int)$params['pagesize'] : 5;
        $prf_opuser =  getOpuser();

        $where = ['prf_pi_id' => $id, 'ORDER' => ['prf_update_time' => 'DESC']];

        $this->db->Begin();

        // 获取项目明细状态
        $pi_info = $this->getPiByPiId($id);
        $pi_status = (int)$pi_info[0]['pi_status'];

        // 使用父类的分页方法
        $pages = $this->paging($this->table, $where, $page, $pagesize);
        $where['LIMIT'] = [$pages['limit'], $pagesize];

        // 使用LEFT JOIN关联adm_user表获取用户名称
        $join = [
            '[>]adm_user' => ['prf_opuser' => 'au_id']
        ];
        $fields = [
            'project_follow.*',
            'adm_user.au_name'
        ];
        $rows = $this->db->select($this->table, $join, $fields, $where);

        // 查询并统计项目明细跟进的统计信息
        $selfFollowCount = $this->db->count($this->table, ['prf_pi_id' => $id, 'prf_opuser' => $prf_opuser]);

        // 获取最后编辑信息（包含用户名称）
        $lastEditInfo = $this->db->select($this->table, $join, [
            'project_follow.prf_opuser',
            'project_follow.prf_update_time',
            'adm_user.au_name'
        ], ['prf_pi_id' => $id, 'ORDER' => ['prf_update_time' => 'DESC'], 'LIMIT' => 1]);

        $lastSelfEditInfo = [];
        if ($lastEditInfo && $lastEditInfo[0]['prf_opuser'] == $prf_opuser) {
            $lastSelfEditInfo = $lastEditInfo;
        } else {
            // 获取当前用户最后编辑信息（包含用户名称）
            $lastSelfEditInfo = $this->db->select($this->table, $join, [
                'project_follow.prf_opuser',
                'project_follow.prf_update_time',
                'adm_user.au_name'
            ], ['prf_pi_id' => $id, 'prf_opuser' => $prf_opuser, 'ORDER' => ['prf_update_time' => 'DESC'], 'LIMIT' => 1]);
        }
        $this->db->End();
        return [
            'list' => $rows,
            'page' => $page,
            'pagesize' => $pagesize,
            'total' => $pages['total'],
            'records' => $pages['records'],
            'selfFollowCount' => $selfFollowCount,
            'lastEditInfo' => $lastEditInfo[0],
            'lastSelfEditInfo' => $lastSelfEditInfo[0],
            'pi_status' => $pi_status,
        ];
    }

    /**
	 * @param  int $prf_id
	 * @method 根据项目明细id获取跟进详情
	 * @author hongzhang
	 * @copyright 2025-07-28
	 */
    public function getDetailById($prf_id)
    {
        $row = $this->db->select($this->table, '*', ['prf_id' => $prf_id]);
        return $row;
    }

    /**
	 * @param  array $params
	 * @method 添加或者编辑跟进详情(默认添加)
	 * @author hongzhang
	 * @copyright 2025-07-28
	 */
    public function putDetail($params)
    {
        $this->db->Begin();
        //反查项目明细信息
        $pi_info = $this->getPiByPiId((int)$params['prf_pi_id']);
        $tempData = [
            'prf_pr_id' => (int)$pi_info[0]['pi_pr_id'],
            'prf_pi_id' => (int)$params['prf_pi_id'],
            'prf_des' => $params['prf_des'],
            'prf_opuser' => getOpuser(),
            'prf_create_time' =>  date('Y-m-d H:i:s'),
            'prf_update_time' => date('Y-m-d H:i:s'),
        ];
        // 判断项目明细的状态，如果是可供应或者商品，则同步更新跟进的项目明细状态
        $pi_status = (int)$pi_info[0]['pi_status'];
        if ($pi_status == 2 || $pi_status == 3) {
            $tempData['prf_pi_status'] = $pi_status;
        } else {
            $tempData['prf_pi_status'] = $params['prf_pi_status'];
            $tempData['prf_pi_develop_time'] = $params['prf_pi_develop_time'];
            $piStatusName = "";
            switch ($tempData['prf_pi_status']) {
                case -1:
                    $piStatusName = "无法供应";
                    break;
                case 0:
                    $piStatusName = "待处理";
                    break;
                case 1:
                    $piStatusName = "开发中";
                    break;
            }
            $projectItem = new projectItem();
            $projectItem->changeItemStatus($tempData['prf_pi_id'], $tempData['prf_pi_status'],'项目跟进-状态修改:'.$piStatusName);
        }

        $prf_id = $params['prf_id'];
        // 新增或编辑
        if ($prf_id) {
            // 编辑
            $existCount = $this->db->count($this->table, ['prf_id' => $prf_id]);
            // 存在该条数据才更新 否则报错
            if ($existCount == 0) {
                throw new \Exception('该条数据不存在');
            }
            unset($tempData['prf_create_time']);
            unset($tempData['prf_opuser']);
            unset($tempData['prf_pi_id']);
            $this->db->update($this->table, $tempData, ['prf_id' => $prf_id]);
        } else {
            // 新增
            $this->db->insert($this->table, $tempData);
        }
        
        $this->db->End();
        return ['code' => 200, 'msg' => '操作成功'];
    }

    /**
	 * @param  array $params
	 * @method 删除跟进详情记录
	 * @author hongzhang
	 * @copyright 2025-07-28
	 */
    public function deleteDetail($params)
    {
        $params['prf_pr_id'] = (int)$params['prf_pr_id'];
        $params['prf_pi_id'] = (int)$params['prf_pi_id'];
        $this->db->Begin();
        $this->db->delete($this->table, ['prf_id' => $params['prf_id']]);
        //同时同步项目明细列表总条数
        $count = $this->db->count($this->table, ['prf_pi_id' =>  $params['prf_pi_id']]);
        $this->db->End();
        return ['code' => 200, 'msg' => '删除成功', 'count' => $count];
    }

    /**
	 * @param  int $prf_pi_id
	 * @method 根据项目明细id反查项目明细属性
	 * @author hongzhang
	 * @copyright 2025-07-28
	 */
    private function getPiByPiId($prf_pi_id)
    {
        $row = $this->db->select('project_item', ['pi_pr_id', 'pi_status'], ['pi_id' => $prf_pi_id]);
        return $row;
    }
}
